در این مقاله modifierها یا تغییردهندها در زبان سی شارپ را به شما آموزش میدهیم البته توجه داشته باشید که modifierها با Accsess modifierها متفاوت هستند و Accsess modifier به معنی سطح دسترسی است برای دریافت اطلاعات بیشتر در مورد Accsess modifierها میتوانید به قسمت 29 دوره سی شارپ متوسط وبسایت باگتو مراجعه کنید.
در واقع modifierها یک سری کلمات کلیدی هستند که به کلاسها و متدها و متغیرهای ما معنی و مفهوم خاصی میبخشند. ما در سی شارپ چند نوع تغییردهنده داریم که در ادامه آنها را توضیح میدهیم.
بعد دیدن آموزش سی شارپ در دوره متوسط سطح شی شارپ می توانید به راحتی modifierها را از Accsess modifierها تشخیص دهید.
1.abstract:
اگر در تعریف کلاس از این کلمه کلیدی استفاده کنیم این کلاس مخصوص ارثبری میشود و نمیتوان از آن نمونهگیری کرد ارثبری به این معنی است که یک کلاس از ویژگیهای کلاس دیگر که کلاس پدر خود است بهرهمند شود یعنی اگر کلاس a از کلاس b ارثبری کند بهعنوانمثال اگر کلاسb پراپرتی به نام name داشته باشد کلاس a نیز این پراپرتی را خواهد داشت به شبه کدهای زیر دقت کنید
public abstract class b
{
string name;
}
public class a:b
{
string family;
}
در کد بالا اگر بخواهیم از کلاس b نمونهگیری کنیم این کار غیرمجاز است زیرا از کلمه کلیدی abstract استفاده شده و این کلمه کلیدی به این کلاس این معنی را میبخشد که فقط برای ارثبری است و نمیتوان از آن نمونهگیری کرد
2.const:
اگر در تعریف متغیر از این کلمه کلیدی استفاده کنیم مقدار آن تا انتهای برنامه ثابت است و هرگز عوض نمیشود برای مثال اگر مقدار متغیر num برابر 10 باشد تا آخر برنامه مقدار آن ثابت است و دیگر نمیتوان مقدار آن را عوض کرد یا تغییر داد
const int num = 10;
3.event :
با استفاده از این کلمه کلیدی میتوان برای کلاسها رویداد ایجاد کرد اگر با windows applicationها یا wpf کار کرده باشید متوجه میشوید که هرکدام از المانهای صفحه (مثلاً دکمهها) کلاسهایی هستند که رویدادهای مختلفی دارند مانند رویداد click یا رویداد mouse hover یا رویداد textchange و غیره ...
برای مثال:
public event EventHandler OnMaximum;
البته با کد بالا یک رویداد کامل ساخته نمیشود بلکه باید این رویداد پیادهسازی شود و هدف ما در این بخش نمایش کلمه کلیدی event برای شما بود و برای آموزش کامل این مباحث پیشرفته میتوانید به دوره ستارگان سی شارپ مراجعه فرمایید
4.extern:
میتوان متدهایی ایجاد کرد که پیادهسازی آنها در یک کتابخانه خارجی است و میتوان آن را به متد اضافه کرد
[DllImport("Cmdll.dll")]
public static extern int SampleMethod(int x);
در مثال بالا درون dll پیادهسازی متد SimpleMethod را داریم و با استفاده از اتریبیوت آدرس و نام دی ال ال را میدهیم و هرگاه از این متد استفاده کنم بهصورت خودکار پیادهسازی آن در آن دی ال ال اجرا میشود
5.override:
برای متدهای virtual کلاسهای پدر میتوان پیادهسازی جدید نوشت
public class b
{
public virtual string SimpleMethod()
{
return "Returned From parent Class";
}
}
public class a:b
{
public override string SimpleMethod()
{
return "Returned From Child Class";
}
}
کد بالا به این شکل کار میکند که ما یک متد داریم ولی در کلاس فرزند پیادهسازی متفاوتی نسبت به کلاس پدر دارد اگر از کلاس پدر نمونهگیری کنیم با پیادهسازی خودش اجرا میشود ولی اگر از کلاس فرزند نمونهگیری کنیم با پیادهسازی خودش را در خروجی دریافت میکنیم
6.readonly :
میتوان پراپرتی هایی ایجاد کرد که فقط خواندنی باشند و فقط در همان کلاس خودش میتوان به آن مقدار داد و در هنگام تعریف متغیر
private readonly string name="Bugeto.net";
در کد بالا ما متغیری تعریف کردیم که دیگر جای دیگری در برنامه نمیتوان به آن مقدار داد و فقط میتوان مقدار آن را خواند
7.seald:
با استفاده از کلمه کلیدی seald میتوان کلاسهای مهروموم شده یا کلاسهای عقیم ایجاد کرد به این معنی که نمیتوان از این کلاسها ارثبری کرد و این کلاسها هیچ فرزندی ندارند و فقط میتوان از آنها نمونهگیری کرد دقیقاً برعکس کلاسهای abstract هستند به نمونه زیر توجه کنید.
public class b
{
public string Name { get; set; }
}
public sealed class a:b
{
public string Family { get; set; }
}
در مثال بالا کلاس a که از کلاس b ارثبری کرده است و بهصورت seald تعریف شده پس در نتیجه دیگر نمیتوان از آن ارثبری کرد و اگر از آن ارثبری کنیم کامپایلر ارور میدهد فقط میتوانیم از آنها نمونه تهیه کنیم
8.static :
میتوان کلاسها و متدهای ایستا تعریف کرد یعنی اگر بخواهیم از این کلاسها یا متدهای درون آنها استفاده کنیم نیازی به نمونهگیری نداریم
public static class SimpleClass
{
public static string SimpleMethod()
{
return "Hello Bugeto";
}
}
در کد بالا ما کلاس SimpleClass را بهصورت ایستا تعریف کردیم پس در نتیجه متد داخل آن را هم باید بهصورت ایستا تعریف کنیم. حالا برای استفاده از این کلاس و متد نیازی به نمونهگیری نداریم و بهصورت زیر از آن استفاده میکنیم
Console.WriteLine(SimpleClass.SimpleMethod());
همانطور که میبینید نمونهای از کلاس ایستا تعریف نکردیم و بهصورت مستقیم از آن استفاده میکنیم حالا با کد بالا عبارت "”Hello Bugeto در خروجی چاپ میشود
9.Unsafe:
میتوان متدهای ناامن نوشت یعنی اینکه میتوان عملیاتهایی که کامپایلر انجام نمیدهد را انجام دهیم برخی عملیاتها ناامن هستند و توسط کامپایلر انجام نمیشوند
unsafe static void SimpleMethod()
{
// Unsafe context:
}
حال اگر درون بدنه این متد عملیاتی بنویسیم که ناامن باشند کامپایلر آن عملیاتها را انجام خواهد.
10.Virtual :
اگر متدی virtual باشد میتوان در کلاس فرزند انرا override کرد همانطور که در مثال بالاتر در قسمت override به شما اموزش دادیم تنها متد هایی که از نوع virtual باشند را میتوان override کرد.
Public class SimpleClass
{
public virtual string SimpleMethod()
{
return "Hello Bugeto";
}
}
در کد بالا متد Simple Method را میتوان در کلاسی که از کلاس SimpleClass ارثبری کرده را override کرد
11.volatile :
با این کلمه کلیدی میتوان متغیرهای فرار تعریف کرد این متغیرها قابل cache شدن در کش پردازنده نیستند و درون رم قرار میگیرند.
public class SimpleClass
{
public volatile int SimpleVariable;
public void Test(int i)
{
SimpleVariable = i;
}
}
در کد بالا زمانی که از کلاس نمونهگیری میکنیم و از متد Test استفاده می کنیم ورودی هر مقداری که باشد درون متغیر SimpleVariable ریخته می شود که این متغیر درون حافظه کش پردازنده ذخیره نمیشود و فقط بر روی رم میماند
حتما برای بهتر متوجه شدن این مبحث ویدئوهای مربوط به متغییرها را در دوره سی شارپ متوسط ببینید البته ناگفته نماند که صرفاً خواندن این مقاله کافی نیست بلکه باید تمرین و تکرار کنید تا این موضوع را بهخوبی متوجه شوید
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید