کلمه کلیدی static در سی شارپ
در این جلسه با کلمه کلیدی Static در سی شارپ c# آشنا می شویم .
کلمه کلیدی Static در سی شارپ سه جا استفاده می شود:
- ایجاد اعضا داده ای
- ایجاد اعضا تابعی یا متدها
- ایجاد کلاس
وقتی عضو داده ای یا تابعی را از جنس Static تعریف می کنید به این معنی است که این جزء Static مالکش کلاس است و به هیچ شی ای وابسته نیست برای دسترسی به اعضا Static شما از طریق نام کلاس به اعضا Static دسترسی پیدا می کنید
این موضوع خیلی مهم است که شما درک کنید که اعضا Static به هیچ شی ای وابسته نیست و بدون اینکه نمونه سازی کنید و شی ای ایجاد کنید می شود از اعضا Static استفاده کرد.
به عنوان مثال متد Show از کلاس MessageBox یک متد Static است:
MessageBox.Show(“Dazhyar Pardazesh Isatic”);
در اینجا بدون اینکه لازم باشد از کلاس MessageBox شی ای ایجاد کنید مستقیماً می توانید با نوشتن اسم کلاس و دات(.) به متد Show دسترسی پیدا کنید و صداش بزنید.
همچنین متدهای ()ToDouble() , ToString این Convertها از نوع Static هستند:
Convert.ToDouble()
Convert.ToString()
مثال:
یک کلاس ایجاد می کنیم:
class Class1
{
public int a;
//….اعضا داده ای استاتیک اعضایی هستند که بین تمام اشیایی که از روی این کلاس ساخته می شوند به صورت مشترک قرار دارند .
public static int b;
}
اشیایی که از روی این کلاس ساخته می شوند هر کدام به صورت اختصاصی بخش a را دارند ولی داده استاتیک را ندارد:
برای اینکه به داده استاتیک دسترسی پیدا کنیم کافی است که اسم کلاس و دات(.) را بنویسیم:
public void Method1()
{
}
برای تعریف یک متد از نوع static کافی است که بعد از سطوح دسترسی کلمه static را بنویسیم//
متدی که static می شود به شی خاصی وابسته نیست و مستقل است .//
public static void Method2()
{
}
}
توابع یا متدهایی که static هستند به فیلدهای غیر static دسترسی ندارد
تمامی متدهای غیر استاتیک می توانند به فیلدهای استاتیک دسترسی داشته باشند مثلاً متد ()Method1 که غیر استاتیک است می تواند به فیلد b که استاتیک است دسترسی داشته باشد .
مشاهده می کنید که داخل متد static فیلد غیرstatic را نمی شناسد و error می دهد.
class Class1
{
public int a;
public static int b;
public void Method1()
{
a = 10;
b = 20;
MessageBox.Show(“a=” + a.ToString()+” “+”b=” +b.ToString());
}
public static void Method2()
{
b = 20;
MessageBox.Show(“b=” + b.ToString());
}
}
برای فراخوانی متد استاتیک فقط لازم است است که نام کلاس و علامت دات(.) را با نام متد بنویسیم:
private void button1_Click(object sender, EventArgs e)
{
Class1.Method2(); //….فراخوانی متد استاتیک
}
private void button2_Click(object sender, EventArgs e)
{
Class1 c = new Class1(); //….فراخوانی متد غیر استاتیک
c.Method1();
}
برنامه را اجرا می کنیم:
نکته:
- بدون نمونه سازی قابل دسترسی است.
- فیلد استاتیک توی همه ی حافظه ها مشترک است.
استاتیک توی همه ی حافظه ها مشترک است یعنی چه:
با یک مثال ساده شروع می کنیم:
یک کلاس جدید ایجاد می کنیم
class MyClass
{
public int a;
public static int b;
public string Method()
{
return “a=” + a.ToString() + “b=” + b.ToString();
}
}
داخل پنجره فرم شده و کنترل های مورد نیاز را روی آن قرار می دهیم:
private void button1_Click(object sender, EventArgs e)
{
MyClass Obj1 = new MyClass();
Obj1.a = 10;
MyClass.b = 20;
label1.Text = “Obj1=”+ Obj1.Method();
}
برنامه را اجرا می کنیم و روی Start کلیک می کنیم:
کدها را تغییر می دهیم:
private void button1_Click(object sender, EventArgs e)
{
MyClass Obj1 = new MyClass();
Obj1.a = 10;
MyClass.b = 20;
label1.Text = “Obj1(“+ Obj1.Method()+”)”;
//————————————————–این کدها را اضافه می کنیم
MyClass Obj2 = new MyClass();
Obj2.a = 100;
MyClass.b = 200;
label1.Text = “Obj2(” + Obj2.Method() + “)”;
}
برنامه را اجرا می کنیم و روی Start کلیک می کنیم:
کدها را تغییر می دهیم:
private void button1_Click(object sender, EventArgs e)
{
MyClass Obj1 = new MyClass();
Obj1.a = 10;
MyClass.b = 20;
label1.Text = “Obj1(“+ Obj1.Method()+”)”;
//————————————————–
MyClass Obj2 = new MyClass();
Obj2.a = 100;
MyClass.b = 200;
label1.Text = “Obj2(” + Obj2.Method() + “)”;
اگر به برنامه این را خط را اضافه کنم و بگوییم دوباره Obj1 را چاپ کند//
label1.Text = “Obj1(” + Obj1.Method() + “)”;
}
برنامه را اجرا می کنیم و روی Start کلیک می کنیم:
شاید انتظار داشتیم که مقدار b برابر 20 باشد ولی مشاهده می کنیم که مقدار 200 را نشان می دهد.
داده های غیر استاتیک مقدار اختصاصی خودشان را دارند ولی داده های استاتیک مقدار اختصاصی برای خودشان ندارند و مقدار آخرین تغییرات را نشان می دهند بنابراین اعضا داده ای استاتیک بین تمام اشیایی که از روی آن ساخته می شود مشترک هستند .
آموزش ما به پایان رسید. امیدواریم کلمه کلیدی static در سی شارپ را به طور کامل متوجه شده باشید و بتوانید در برنامه هاتون به درستی استفاده کنید. در جلسه بعد میخواهیم با کلاس Static و سازنده Static آشنا شویم. با ما همراه باشید. ;-)
بسیار عالی توضیح داده اید ممنون
سلام
خیلی ممنون از توضیحات خوب و ساده و قابل درکتون
فقط یک جا به اشتباه نوشتید که :
“مشاهده می کنید که داخل متد static فیلد static را نمی شناسد و error می دهد.”
در حالی که متد ststic فقط فیلدهای ststic را می شناسند.
و البته در مثالی هم که زده شده به درستی نمایش و اجرا شده، فکر می کنم اشتباه تایپی بوده که حیفه این آموزش خوبه که یه اشتباه لپی اینجوری داشته باشه.
سلام و عرض ادب
تصحیح شد ، از دقت نظر شما سپاسگزاریم .
با تشکر از همراهی شما
درود عالي توضيح داده شده
موفق باشين
سلام و عرض ادب
رضایت شما موجب خرسندی ماست و حمایت شما برای ما بسیار ارزشمند است.
با تشکر از همراهی شما