PDA

View Full Version : سوال: مشکل در مقدار دهی(Set) به Property



parsa lotfy
یک شنبه 25 بهمن 1394, 06:17 صبح
با سلام.
من مدتی هست که دارم کتاب سی شارپ دیتل رو میخوونم ، قبلا ی جایی توو مقدار دهی به یه Property به مشکل برخوردم ، زیاد جدی نگرفتم !
الان میبینم نه ! واقعا جدیه ! چون بالاخره یه مطلب کلیدی و مهمه باید یادش بگیرم ، الان ک توو بخش توارث (Inheritance) هستم دوباره ب هموون مشکل برخوردم...
میخواستم اگ ممکنه بگین چرا این مشکل رخ میده و راه حلش چیه...با تشکر:لبخند:

این از کد کلاس مبنا یا هموون Base :

using System;

public class Parent
{

public int age;

public string Name
{
get { return Name; }
set { Name = value; }
}

public void Show()
{
Console.WriteLine("I'm {0} \nI'm {1} years old !",Name,age);
}

}


اینم از کد کلاس مشتق شده یا Drived ( که چیز خاصی تووش نیس ! ) :

using System;

public class Child : Parent
{

}


اینم از کلاس Program :

using System;

public class Program
{
public static void Main(string[] args)
{
Child test = new Child();

test.age = 19;
test.Name = "Parsa";
test.Show();
Console.ReadKey();
}

}


در اخر هم عکس اروری ک نمایش میده :

139055

ممنون میشم بهم توضیح بدین :قلب:
با تشکر:قلب:

fool66
یک شنبه 25 بهمن 1394, 06:41 صبح
سلام
فکر کنم قوانین Property رو یادت رفته یا نخوندی کلاس
Base رو به صورت زیر تغییر بده



using System;

public class Parent
{
public int age;
private string name;
public string Name
{
get { return name; }
set { name = value; }
}


public void Show()
{
Console.WriteLine("I'm {0} \nI'm {1} years old !", Name, age);
}
}



موفق باشی

parsa lotfy
یک شنبه 25 بهمن 1394, 06:57 صبح
نه من همرو خووندم فک کنم یادم رفته :لبخند::لبخند:
چرا نمیشه به طور مستقیم از خود Property استفاده کرد ؟؟؟؟
حتما باس ی متغیر وسطه درست کنم ؟؟؟
چ کاریه اخه !!!؟؟؟:متفکر::متفکر:

fool66
یک شنبه 25 بهمن 1394, 06:59 صبح
اصلا
Property برای مبحث Encapsulation هست که مقدار دهی به خوده متغیر امکان پذیر نباشه به دلیل آسیب پذیر بودن برای متغیر های حساس

parsa lotfy
یک شنبه 25 بهمن 1394, 07:04 صبح
عاها.... پس نمیشه ب حود متغیر مقدار داد و همیشه باس ی واسطه درست کنیم...:متفکر::متفکر:
خیلی ممنون بالاخره یاد گرفتم !!!:لبخند::قلب:

alibilgats
یک شنبه 25 بهمن 1394, 07:07 صبح
سلام
اینطوری بنویسی فکر کنم مشکلی نباشه!

public string Name { set; get; }

parsa lotfy
یک شنبه 25 بهمن 1394, 07:10 صبح
درسته اینجووریم میشه !!!!:لبخند::لبخند:
جالب بوود...

fool66
یک شنبه 25 بهمن 1394, 07:16 صبح
شما یا باید DATA TYPE معمولی استفاده کنید که هر چیزی که مجاز باشه میگیره کاری به درست و غلط بودن نداره ( مثل نمره که نمیتونه یه عدد منفی باشه ولی INT قبولش میکنه )
ولی
Property یه DATA TYPE کنترل شده هست که اجازه نمیده هرچیزی بگیره (البته باید قوانینش رو خودت پیاده سازی کنی)

139058
توی این عکس NAME1 و NAME2 رو نگاه کن

parsa lotfy
یک شنبه 25 بهمن 1394, 07:23 صبح
دوستان ، ی مشکل دیگه هم دارم ، شرمنده !!! :لبخند:


using System;

public class Child : Parent
{

public override void Show()
{
Console.WriteLine("Salam");
}

}

خواستم با استفاده از Override متد Show کلاس Parent رو عوض کنم ... این ارور رو داد :

139059

:متفکر::متفکر::متفکر:

alexmcse
یک شنبه 25 بهمن 1394, 17:23 عصر
سلام
شما باید از کلمه کلیدی virtual استفاده کنی نه
Override
بعدا در کلاس دیگر متد Show اورراید میشود

using System;
public class Parent
{

public virtual void Show()
{
Console.WriteLine("Salam");
}

}


public class Child: Parent
{

public override void Show()
{
Console.WriteLine("hello");
}

}


public class Child1: Parent
{

public override void Show()
{
Console.WriteLine("سلام");
}

}