PDA

View Full Version : مشکل در استفاده از property ها



smt1383
پنج شنبه 27 خرداد 1389, 10:48 صبح
با سلام خدمت دوستان
من در پروژه ام یک کلاس به نام Student تعریف کرده ام. در فرم Form1 یک آرایه ای از کلاس Student دارم:



Student[] students;

حال می خواهم پس از ایجاد فرم 2 آرایه students را به فرم 2 بفرستم. برای این منظور در فرم 2 یک پراپرتی از نوع Student[] تعریف کرده ام:




private Student[] students;
public Student[] Students
{
get { return students; }
set { students= value; }
}

حال در فرم 1 برای ارسال این آرایه به فرم 2 می نویسیم:




Form2 frm = new Form2 ();
frm.Students= this.students;
frm.ShowDialog();

اما با این پیغام خطا مواجه می شوم:


Error Inconsistent accessibility: property type Project1.Student[]' is less accessible than property Project1.Form2.Students'


ممنون می شوم اگر دوستان راهنمایی کنند که کجای برنامه اشکال دارد.

exlord
پنج شنبه 27 خرداد 1389, 10:53 صبح
تو فرم 1

public Student[] students;

smt1383
پنج شنبه 27 خرداد 1389, 12:43 عصر
public کردم اما باز هم همون خطا رو میده. طبیعی هم هست. من که نمیخواهم به students[] در فرم اول دسترسی داشته باشم که اونو public کنم. بلکه می خواهم به عنوان دیتا به فرم دوم ارسال کنم.

amir-yeketaz
پنج شنبه 27 خرداد 1389, 13:16 عصر
اگه میشه برنامتون رو بذارین چون اصلا این چیزی که شما گفتین معنی نداره!!!!

smt1383
پنج شنبه 27 خرداد 1389, 14:18 عصر
اگه میشه برنامتون رو بذارین چون اصلا این چیزی که شما گفتین معنی نداره!!!!

فکر می کنم کامل توضیح دادم. بطور خلاصه در فرم 1 یک آرایه از کلاس Student دارم که می خواهم این آرایه را به فرم 2 ارسال کنم. برای این منظور در فرم 2 یک پراپرتی از نوع []Student تعریف کردم. حال به هنگاه ایجاد فرم 2 می خواهم آرایه موجود در فرم 1 را به پراپرتی موجود در فرم 2 ارسال کنم اما با پیغام خطایی که گفتم مواجه می شوم.

exlord
پنج شنبه 27 خرداد 1389, 14:33 عصر
کلاس Student که تعریف کردین اون public هستش؟؟؟؟؟

amir-yeketaz
پنج شنبه 27 خرداد 1389, 15:30 عصر
فکر میکنم باید از ایندکسر استفاده کنید ...
یعنی تو فرم دوم این کارو بکنید :

private Student[] students = new Student[10];
public Student this[int index]
{
get
{
return students[index];

}
set { students[index] = value; }
}

و تو فرم اول این کار :

Form2 frm = new Form2();
int i = 0;
foreach (Student s in students)
{
frm[i] = s;
}


البته روش های خیلی بهتری برای استفاده از ایندکسر ها وجود داره که به نظرم به لینک زیر برید خیلی مفیده:
http://www.csharp-station.com/Tutorials/Lesson11.aspx

موفق باشید ...

smt1383
پنج شنبه 27 خرداد 1389, 17:28 عصر
شرمنده از همه دوستان. همونطور که دوستمون exlord گفتند خود کلاس Student را public تعریف نکرده بودم. مشکل حل شد. البته متوجه نشدم چرا؟ با توجه به اینکه کلاس Student در سطح namespace پروژه اصلی تعریف شده است تصور می کردم لازم نیست public تعریف شود مگر اینکه لازم باشد از داخل namespace دیگری به این کلاس دسترسی پیدا کرد. اما به هر حال این کلاس را public کردم و مشکل حل شد هر چند علتش را نفهمیدم!!

exlord
جمعه 28 خرداد 1389, 08:16 صبح
شرمنده از همه دوستان. همونطور که دوستمون exlord گفتند خود کلاس Student را public تعریف نکرده بودم. مشکل حل شد. البته متوجه نشدم چرا؟ با توجه به اینکه کلاس Student در سطح namespace پروژه اصلی تعریف شده است تصور می کردم لازم نیست public تعریف شود مگر اینکه لازم باشد از داخل namespace دیگری به این کلاس دسترسی پیدا کرد. اما به هر حال این کلاس را public کردم و مشکل حل شد هر چند علتش را نفهمیدم!!
اگه مشخص نکنی پیشفرض protected برمیداره نه public ........

A.S.Roma
جمعه 28 خرداد 1389, 10:12 صبح
اگه مشخص نکنی پیشفرض protected برمیداره نه public ........
پیش فرض Internal هست.



Classes and structs are declared as internal by default unless the keyword public is added to the class definition