PDA

View Full Version : سوال: دستور{} get و {} set در #c یعنی چه؟



hasan1500
شنبه 24 فروردین 1392, 10:45 صبح
دستور{} get و {} set در #c یعنی چه؟
کجاها کاربرد داره و اگه میشه یک مثال ساده بزنید؟:افسرده:

C#‎_best_Programmer
شنبه 24 فروردین 1392, 10:57 صبح
حسن اینا خطرناکن حسن:لبخند:
ببین اینا واسه مقدار دهی و پس دادن یه مقدار تحت عنوان خصوصیت یه شی استفاده میشه
مثالش تو فرم بنویس this.BackGroundColor

saber_ershadi
شنبه 24 فروردین 1392, 11:23 صبح
ببین دوست عزیز تو مبحث شئ گرایی از 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();
}

امید وارم تونسته باشم منظور رو رسونده باشم

amir_pro
شنبه 24 فروردین 1392, 13:44 عصر
یه مثال کاربردی دیگش اینه که شما یه یوزرکنترل ساختی و اگه بخوای یه property جدید براش مشخص کنی باید خوب این ویژگی رو براش تعریف کنی. مربوط میشه به شی گرایی که برای این منظور از get و set استفاده میکنی. قبل تعریف کردن اون ویژکی باید یه فیلد با دسترسی private تعریف کنی و بعدش این property رو public تعریف کنی

massar
شنبه 24 فروردین 1392, 14:15 عصر
سلام

یکی از اعمال معمول در برنامه نویسی شی گرا encapsulation است، که در برانه نویسی برای دو موقعیت بکار میره:


یک مکانیزم برای محدود کردن دسترسی به ویژگی ها و کارکردهای داخلی اشیا (مثلا تعریف کلاس ها و استراک ها در C#)
یک روش برای اعمال محدودیت و کنترل در دسترسی به صفات اشیا (که موضوع این تاپیکه)

get و set روش زبان c# برای پاسخ گویی به این نیاز برنامه نویسی هست. از قدیم (و هنوزم) در برنامه نویسی c++ و c این یک کار خوب محسوب میشد که به جای دسترسی مستقیم به متغییر های یک شی بیان اون متغییر رو private کنن و دو تابع بنویسن برای خواند و نوشتن اون متغییر، حالا c# این ویژگی رو خیلی تمیزتر با property ها پیاده سازی کرده. property ها در واقع دو متد هستند یعنی اگه یه property با متد get و set بنویسی و کامپایل کنی بعد کد IL اونو بخونی میبینی که کامپایلر دو تابع برای اون property تولید کرده و سازه ای به نام property تو کد میانی نیست.
پس در واقع property مثل یک متغییر عمل میکنه ولی قدرت یک تابع رو داره.


چند نمونه از جاهایی که استفاده میشه:


کلا بجای متغییر ها خوبه که از property استفاده کنیم، مگر اینکه کد با performance خیلی خیلی بالا داریم مینویسیم، حدس بزنین چرا؟ :-)
وقتی میخواییم یک متغیرمون از بیرون فقط خواندنی یا فقط نوشتنی باشه، که خیلی اتفاق میفته
میخواییم وقتی متغییری تغییر کرد مطلع بشیم و کارهای دگه ای هم بکنیم، مثلا اگر متغییر IP عوض شد تابع ReConnect() رو هم صدا بزنیم

hasan1500
شنبه 24 فروردین 1392, 14:37 عصر
سلام
من تا حدودی منظور شما رو فهمیدم. کد زیر مثال یک تیر هست که وقتی ایجاد شد با شمت بالا حرکت میکنه و وقتی به بالای فرم برخورد میکنه حذف میشه.
من می خوام بدونم توی این کد گت و یت چی کار می کنند؟؟


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;
}
}

amir_pro
شنبه 24 فروردین 1392, 14:45 عصر
ببین اگه یه ویژگی فقط get داشته باشه اون موقع اون ویژگی فقط حالت خواندنی داره و اگه فقط set داشته باشه فقط حالت نوشتنی داره و اگه دو تاش رو داشته باشه دیگه خودت حدس بزن :کف:
تو این کد state یه فیلد هست و State یه ویژگی/ و ویژگی Speed هم که تابلو برا سرعت حرکت تیر هست که در واقع اینتروال تایمرا ست میکنه

hasan1500
شنبه 24 فروردین 1392, 14:53 عصر
ببخشید یه سوال دیگه از کد مربوط به تیر:
توی این کد استارت تایمر رو توی قسمت InitializeComponent(); نوشت.
چه وقتایی ما می تونیم کدهامون رو توی اسن قسمت بنویسیم؟؟؟

abdullah20
شنبه 24 فروردین 1392, 18:54 عصر
ببخشید یه سوال دیگه از کد مربوط به تیر:
توی این کد استارت تایمر رو توی قسمت InitializeComponent(); نوشت.
چه وقتایی ما می تونیم کدهامون رو توی اسن قسمت بنویسیم؟؟؟

به این قسمت میگن constructors
حالا constructors چیست؟
constructors یک تابع همنام با نام کلاس است
گاهی لازم است در هنگام تعریف یک شی از کلاس عملیات خواصی انجام شود مثلا متغیری مقدار اولیه بگیرد در این گونه موارد ما از constructors استفاده میکنیم

amir_pro
یک شنبه 25 فروردین 1392, 00:31 صبح
سازنده ها وقتی صدا زده میشه که برای یه کلاس که تعریف کردی مثل Class1 ss; بیای با new حافظه بگیری یعنی Class1 ss=new Class1(); . با این کار سازنده پیش فرض کلاس صدا زده میشه. سازنده نوع خروجی نداره. در واقع تابع همنام با اسم کلاس رو میگن. میتونی سازنده ها رو آورلود کنی. یعنی مثل دستور messagebox.show() که میتوی هر باز چند پارامتر بهش بدی. به این کار میگن سربار گذاری توابع. این کار بر اساس تعداد پارامترها و نوع پارامترها انجام میشه. فکر کنم بر اساس مقدار خروجی توابع هم بشه ولی مطمئن نیستم. از دوستان عزیز راهنمایی میگیرم تو این زمینه.
برای این تایمر رو تو سازنده استارت کرده که وقتی چند تا شی Tir ساختی مثلا 10 تا نیای جدا جدا هر کدومش رو استارت کنی