دستور{} get و {} set در #c یعنی چه؟
کجاها کاربرد داره و اگه میشه یک مثال ساده بزنید؟:افسرده:
Printable View
دستور{} get و {} set در #c یعنی چه؟
کجاها کاربرد داره و اگه میشه یک مثال ساده بزنید؟:افسرده:
حسن اینا خطرناکن حسن:لبخند:
ببین اینا واسه مقدار دهی و پس دادن یه مقدار تحت عنوان خصوصیت یه شی استفاده میشه
مثالش تو فرم بنویس this.BackGroundColor
ببین دوست عزیز تو مبحث شئ گرایی از SET , GET برای خواندن و بازگرداندن اطلاعات به جای دستورات ورودی و خروجی مثلا تو محیط کنسول console.readline و . . . استفاده میشه ، دستور زیر رو ببین دو متغییر x , y رو با SET , get تنظیم میکنیم و Area مساحت رو برمیگردونه(دستورات زیر رو تو یه کلاس قرار میدیم)
int x, y;
public int X
{
get
{
return x;
}
set
{
x = (value > 0) ? value : 0;
}
}
public int Y
{
get
{
return y;
}
set
{
y = (value > 0) ? value : 0;
}
}
public int Area()
{
return x * y;
}
public string PrintDistance()
{
string result = "Rectangle Area :" + Area().ToString();
return result;
}
حالا میتونی به این شکل از دستورات بالا استفاده کنی :
static void Main(string[] args)
{
// rectangle
Rectangle r1 = new Rectangle();
Console.Write("Enter Rectangle X :");
r1.X = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter Rectangle Y :");
r1.Y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(r1.PrintDistance());
Console.ReadKey();
}
امید وارم تونسته باشم منظور رو رسونده باشم
یه مثال کاربردی دیگش اینه که شما یه یوزرکنترل ساختی و اگه بخوای یه property جدید براش مشخص کنی باید خوب این ویژگی رو براش تعریف کنی. مربوط میشه به شی گرایی که برای این منظور از get و set استفاده میکنی. قبل تعریف کردن اون ویژکی باید یه فیلد با دسترسی private تعریف کنی و بعدش این property رو public تعریف کنی
سلام
یکی از اعمال معمول در برنامه نویسی شی گرا encapsulation است، که در برانه نویسی برای دو موقعیت بکار میره:
- یک مکانیزم برای محدود کردن دسترسی به ویژگی ها و کارکردهای داخلی اشیا (مثلا تعریف کلاس ها و استراک ها در C#)
- یک روش برای اعمال محدودیت و کنترل در دسترسی به صفات اشیا (که موضوع این تاپیکه)
get و set روش زبان C# برای پاسخ گویی به این نیاز برنامه نویسی هست. از قدیم (و هنوزم) در برنامه نویسی C++ و c این یک کار خوب محسوب میشد که به جای دسترسی مستقیم به متغییر های یک شی بیان اون متغییر رو private کنن و دو تابع بنویسن برای خواند و نوشتن اون متغییر، حالا C# این ویژگی رو خیلی تمیزتر با property ها پیاده سازی کرده. property ها در واقع دو متد هستند یعنی اگه یه property با متد get و set بنویسی و کامپایل کنی بعد کد IL اونو بخونی میبینی که کامپایلر دو تابع برای اون property تولید کرده و سازه ای به نام property تو کد میانی نیست.
پس در واقع property مثل یک متغییر عمل میکنه ولی قدرت یک تابع رو داره.
چند نمونه از جاهایی که استفاده میشه:
- کلا بجای متغییر ها خوبه که از property استفاده کنیم، مگر اینکه کد با performance خیلی خیلی بالا داریم مینویسیم، حدس بزنین چرا؟ :-)
- وقتی میخواییم یک متغیرمون از بیرون فقط خواندنی یا فقط نوشتنی باشه، که خیلی اتفاق میفته
- میخواییم وقتی متغییری تغییر کرد مطلع بشیم و کارهای دگه ای هم بکنیم، مثلا اگر متغییر IP عوض شد تابع ReConnect() رو هم صدا بزنیم
سلام
من تا حدودی منظور شما رو فهمیدم. کد زیر مثال یک تیر هست که وقتی ایجاد شد با شمت بالا حرکت میکنه و وقتی به بالای فرم برخورد میکنه حذف میشه.
من می خوام بدونم توی این کد گت و یت چی کار می کنند؟؟
public partial class Tir : UserControl
{
public int Speed
{
get { return timer1.Interval; }
set
{
if (value > 0)
timer1.Interval = value;
}
}
private bool state = true;
public bool State
{
get { return state; }
}
public Tir()
{
InitializeComponent();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
Location = new Point(Location.X, Location.Y - 1);
if (Location.Y < 0)
{
timer1.Stop();
Hide();
state = false;
}
}
ببین اگه یه ویژگی فقط get داشته باشه اون موقع اون ویژگی فقط حالت خواندنی داره و اگه فقط set داشته باشه فقط حالت نوشتنی داره و اگه دو تاش رو داشته باشه دیگه خودت حدس بزن :کف:
تو این کد state یه فیلد هست و State یه ویژگی/ و ویژگی Speed هم که تابلو برا سرعت حرکت تیر هست که در واقع اینتروال تایمرا ست میکنه
ببخشید یه سوال دیگه از کد مربوط به تیر:
توی این کد استارت تایمر رو توی قسمت InitializeComponent(); نوشت.
چه وقتایی ما می تونیم کدهامون رو توی اسن قسمت بنویسیم؟؟؟
سازنده ها وقتی صدا زده میشه که برای یه کلاس که تعریف کردی مثل Class1 ss; بیای با new حافظه بگیری یعنی Class1 ss=new Class1(); . با این کار سازنده پیش فرض کلاس صدا زده میشه. سازنده نوع خروجی نداره. در واقع تابع همنام با اسم کلاس رو میگن. میتونی سازنده ها رو آورلود کنی. یعنی مثل دستور messagebox.show() که میتوی هر باز چند پارامتر بهش بدی. به این کار میگن سربار گذاری توابع. این کار بر اساس تعداد پارامترها و نوع پارامترها انجام میشه. فکر کنم بر اساس مقدار خروجی توابع هم بشه ولی مطمئن نیستم. از دوستان عزیز راهنمایی میگیرم تو این زمینه.
برای این تایمر رو تو سازنده استارت کرده که وقتی چند تا شی Tir ساختی مثلا 10 تا نیای جدا جدا هر کدومش رو استارت کنی