کلمه کلیدی static در سی شارپ

در این جلسه با کلمه کلیدی Static در سی شارپ c# آشنا می شویم .

کلمه کلیدی Static در سی شارپ سه جا استفاده می شود:

  1. ایجاد اعضا داده ای
  2. ایجاد اعضا تابعی یا متدها
  3. ایجاد کلاس

وقتی عضو داده ای یا تابعی را از جنس 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 را دارند ولی داده استاتیک را ندارد:

کلمه کلیدی static در سی شارپ

برای اینکه به داده استاتیک دسترسی پیدا کنیم کافی است که اسم کلاس و دات(.) را بنویسیم:

کلمه کلیدی static در سی شارپ

public void Method1()
{
}

برای تعریف یک متد از نوع static کافی است که بعد از سطوح دسترسی کلمه static را بنویسیم//

متدی که static می شود به شی خاصی وابسته نیست و مستقل است .//

public static void Method2()
{
}

}

توابع یا متدهایی که static هستند به فیلدهای غیر static دسترسی ندارد

تمامی متدهای غیر استاتیک می توانند به فیلدهای استاتیک دسترسی داشته باشند مثلاً متد ()Method1 که غیر استاتیک است می تواند به فیلد b که استاتیک است دسترسی داشته باشد .

کلمه کلیدی static در سی شارپ

مشاهده می کنید که داخل متد 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();
}

برنامه را اجرا می کنیم:

کلمه کلیدی static در سی شارپ

کلمه کلیدی static در سی شارپ

نکته:

  • بدون نمونه سازی قابل دسترسی است.
  • فیلد استاتیک توی همه ی حافظه ها مشترک است.

استاتیک توی همه ی حافظه ها مشترک است یعنی چه:

با یک مثال ساده شروع می کنیم:

یک کلاس جدید ایجاد می کنیم

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 کلیک می کنیم:

کلمه کلیدی static در سی شارپ   کلمه کلیدی static در سی شارپ

کدها را تغییر می دهیم:

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 کلیک می کنیم:

کلمه کلیدی static در سی شارپ  کلمه کلیدی static در سی شارپ

کدها را تغییر می دهیم:

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 کلیک می کنیم:

کلمه کلیدی static در سی شارپ  کلمه کلیدی static در سی شارپ

شاید انتظار داشتیم که مقدار b برابر 20 باشد ولی مشاهده می کنیم که مقدار 200 را نشان می دهد.

کلمه کلیدی static در سی شارپ

کلمه کلیدی static در سی شارپ

کلمه کلیدی static در سی شارپ

داده های غیر استاتیک مقدار اختصاصی خودشان را دارند ولی داده های استاتیک مقدار اختصاصی برای خودشان ندارند و مقدار آخرین تغییرات را نشان می دهند بنابراین اعضا داده ای استاتیک بین تمام اشیایی که از روی آن ساخته می شود مشترک هستند .

آموزش ما به پایان رسید. امیدواریم کلمه کلیدی static در سی شارپ را به طور کامل متوجه شده باشید و بتوانید در برنامه هاتون به درستی استفاده کنید. در جلسه بعد میخواهیم با کلاس Static و سازنده Static آشنا شویم. با ما همراه باشید. ;-)