PDA

View Full Version : مشکل در کار با آرایه ای از یک کلاس



Amir Oveisi
چهارشنبه 09 فروردین 1385, 23:26 عصر
من یک کلاس دارم که چندتا متغیر و چند تا تابع واسه مقدار دهی و مقدار گیری داره
وقتی که یک آرایه از این کلاس تعریف میکنم و میخوام مثلا به یکی از اعضای آرایه مقدار بدم ( با تابعی که تو کلاس تعریف کردم ) یه runtime error میده : Object reference not set to an instance of an object
آرایه تو کلاس Form تعریف شده و اینجوری پیاده شده :
myArray[x,y].setBoolValue( true)

محمد میرمصطفی
پنج شنبه 10 فروردین 1385, 00:30 صبح
با سلام به دوست خوبم.
با بررسی کد زیر و اشتباهی که در این تصحیح شده، امیدوارم بتونم کمکت کنم.


namespace ConsoleApplication1
{
class X//*01
{
//*02
#region a
private int _a;
///<summary></summary>
publicint a
{
get { return _a; }
set { _a = value; }
}
#endregion
}
class Program
{
static void Main(string[] args)
{
X[] xes = new X[10];//*03
foreach (X x in xes)
x.a = 5; //*04
foreach (X x in xes)
{
x = new X();//*05
x.a = 5;//*06
}
}
}
}

در بالا یه کلاس ایجاد شده(*01) به نام X که حاوی یه prpperty هست (*02) به نام a.
در کلاس program، یه آرایه ازش ساختم(*03) به نام xes. بعدم به a تمام عناصر xes مقدار 5 رو دادم(*04). ولی...
ولی این استباهه. من آرایم رو ساختم، ولی عناصر آرایه رو که مقداردهی نکردم. یعنی تو pointer به کلاسهایی که هنوز ساخته نشدن ایجاد کردم. خوب pointer خالی که به درد نمی‏خوره. پس برنامه Error می‏ده و متوقف می‏شه. اگه قبل از قسمت (*04)، قسمت (*05) رو بزاریم تا تک‏نک عناصر Initialize بشن، یعنی کلاسها ایجاد بشن و به pointerها نسبت داده‏بشن، مشکل حل می‏شه.
موفق باشید.

Amir Oveisi
پنج شنبه 10 فروردین 1385, 19:44 عصر
خیلی ممنون نکته جالبی بود . ولی اینکارو که میکنم میگه نمیتونه آرایه رو مقدار بده چون read-only هستش !!! به نظر شما چشه؟

Amir Oveisi
شنبه 12 فروردین 1385, 23:37 عصر
کسی نیس جواب بده؟؟

once4ever
شنبه 12 فروردین 1385, 23:47 عصر
private int _a;
///<summary></summary>
publicint a
{
get { return _a; }
set { _a = value; }
}

احتمالا به این قسمت توجه نکردید!

محمد میرمصطفی
یک شنبه 13 فروردین 1385, 22:43 عصر
توجه دارید که قسمت foreach در (*04) باید حذف بشه و فقط محض اطلاع، اینجا آوردمش.

Amir Oveisi
یک شنبه 20 فروردین 1385, 10:26 صبح
درسته چون وقتی با for نوشتم کار کرد. خیلی ممنون