توابع set و get در سی شارپ
در این جلسه می خواهیم با توابع set و get در سی شارپ که خیلی معروف هستند آشنا شویم. در ادامه با مفهوم Property آشنا می شویم و میفهمیم که چطور از توابع set و get در سی شارپ استفاده کنیم.
یک کلاس بنام Student ایجاد می کنیم داخل این کلاس یک سری فیلد اضافه می کنیم:
class Student
{
//……….به متغیرهای ساده ای که داخل کلاس تعریف می کنیم فیلد می گویند
private int ID;
private string Name;
private string LastName;
private int Age;
}
داخل کلاس گذاشتن سطح دسترسی متغیرها از نوع public کار درستی نیست و اگر هم سطح دسترسی متغیرها از نوع private در نظر بگیریم خارج از کلاس به این متغیرها دسترسی نداریم .
توابع Property :
به همین دلیل از توابع set و get می توان استفاده کرد که به این توابع Property می گویند.
می خواهیم توابع set و get را برای ID بنویسیم:
public int id // ……(حتماً توجه داشته باشید اینجا پرانتز لازم ندارد )
{
به این دو تا تابع که برای دسترسی به آن فیلدها نوشتیم پراپرتی( Property) می گویند……//
get
{
return ID;
}
set
{
ID = value;
}
}
معمولاً برنامه نویسان حرفه ای یک آندرلاین( _ ) می گذارند پشت اسم فیلد که حتی اسم داخل کلاس با اسمی که خارج از کلاس می آید یکی نباشد.
class Student
{
private int _ID;
private string _Name;
private string _LastName;
private int _Age;
public int ID
{
get
{
return _ID;
}
set
{
_ID = value;
}
}
}
داخل پنجره فرم شده و کنترل مورد نظر را روی آن قرار می دهیم:
مشاهده می کنید که st.ID میاد در صورتی که داخل کلاس فیلدی بنام ID ندارم در واقع با توابع set و get چون من اسمش را گذاشتم ID دارد به _ID اشاره می کند .
private void button1_Click(object sender, EventArgs e)
{
Student st = new Student();
st.ID = 10;
MessageBox.Show(st.ID.ToString());
}
تابع get : {تابع فقط خواندنی است .}
تابع set : {تابع فقط نوشتنی است .}
- اگر بخواهیم این فیلد را فقط خواندنی کنیم تابع set را باید برداریم:
class Student
{
private int _ID;
private string _Name;
private string _LastName;
private int _Age;
public int ID
{
get
{
return _ID;
}
}
}
مشاهده می کنید که دیگر قادر به نوشتن مقدار برای آن نیستید و error می دهد.
- اگر بخواهیم این فیلد را فقط نوشتنی کنیم تابع get را باید برداریم (البته این جور شرایطی خیلی کم پیش می آید.)
class Student
{
private int _ID;
private string _Name;
private string _LastName;
private int _Age;
public int ID
{
set
{
_ID = value;
}
}
}
مشاهده می کنید که دیگر قادر به خواندن مقدار آن نیستید و error می دهد.
برای بقیه فیلدها هم پراپرتی هایش را می نویسیم:
class Student
{
private int _ID;
private string _Name;
private string _LastName;
private int _Age;
public int ID
{
get
{
return _ID;
}
set
{
_ID = value;
}
}
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public string LastName
{
get { return _LastName; }
set { _LastName = value; }
}
public int Age
{
get { return _Age; }
set { _Age = value; }
}
}
داخل فرم شده و برای بقیه متغیرها مقدار دهی می کنیم
private void button1_Click(object sender, EventArgs e)
{
Student st = new Student();
st.ID = 10;
st.Name = “Mahdi”;
st.LastName = “nik”;
st.Age = 200;
}
اینجا یک نکته برای Age دارد:
این مقداری که برای Age وارد کردیم اشتباه است چون هیچ وقت یک دانش آموز را نداریم که سنش 200 باشد . یکی از کاربردهای دیگر Property ها (پروپرتی) این است که بتوانیم مقادیر را کنترل کنیم که کاربر نتواند مقادیر نامعتبر وارد کند. بدین صورت که اگر سن دانش آموزی را بیشتر از 80 وارد کرد خطای OverflowException بدهد
public int Age
{
get { return _Age; }
set
{
if (value > 80)
throw new OverflowException();
_Age = value;
}
}
کاربردهای توابع set و get در سی شارپ
- پنهان سازی انجام می دهد.
- از دسترسی مستقیم به فیلدهای داخل کلاس جلو گیری می کند.
- جلوگیری از وارد کردن مقادیر نامعتبر
امیدواریم از آموزش راضی بوده باشید. در جلسه بعد به آموزش Struct در سی شارپ و تفاوتش با کلاس می پردازیم.
اگر سوال یا انتقادی دارید زیر همین پست در قسمت دیدگاه ها ثبت کنید.
خیلی عالی…
تشکر از زخمات شما
بسیاااار عااالی دستتون درد نکنه
خیلی خوب مثال زدی تشکر
من خیلی جاها خونده بودم و نتونسته بودن درست توضیح بدن اما روش ساده توضیح شما بسیار کار آمد بود . با تشکر
با سلام ممکنه یه سورس کد بزارید که تمام کارهایی که در این ۶ جلسه انجام شد رو داشته باشه؟
سلام و عرض ادب
نظر شما به کارشناسان منتقل می گردد و در صورت امکان ارائه می گردد.
با تشکر از همراهی شما
چقدر زمان میبره دوست عزیز؟
با سلام اگر ممکن است کد سورس های برنامه های این جلسات را هم بگذارید . با تشکر
سلام مجدد آیا منغیر های جلوی گت و ست به بانک متصل است یا خیر .با اینکه ساده توضیح داده اید. اما چرا اسامی جلو ست و گت باید شبیه فیلد های بانک باشد. این شباهت مرا بشک می اندازد شاید به بانک متصل میکند .با تشکر از آموزش های روان و خوبتان
عالی بود هرجا میرفتم نمیگرفتم موضوع به این سادگی رو..
خیلی ممنون خسته نباشید
عالی، خداوند برایتان جبران کند.
عالی بود
حرف نداشت
خلاصه و مفید
سپاس فراوان
واقعا همه آموزش هاتون عالیه خیلی ساده و روان
خدا خیرت بده
سلام،،عالی بود