تابع سازنده در سی شارپ

در این جلسه می خواهیم بدانیم که چگونه از تابع سازنده در سی شارپ و همچنین تابع مخرب می توانیم استفاده کنیم. اشیا معمولا نیازمند  مقداردهی اولیه متغیرها در زمان ایجاد هستند. یک کلاس می تواند شامل تابع سازنده باشد تا این مقداردهی اولیه را در زمان ایجاد شی انجام دهد. در واقع زمانی که یک شی از کلاس ایجاد می شود، سازنده به طور خودکار فراخوانی و اجرا می شود. در ادامه با بیان مثال تابع سازنده در سی شارپ را مفهومی کار می کنیم.

تعریف سازنده

سازنده تابعی است که دارای سطح دسترسی public است و هم نام با نام کلاس می باشد و چون مکانیزمی ندارد که خروجی را برگرداند پس هیچ خروجی را بر نمی گرداند ولی می تواند ورودی داشته باشد.

یک کلاس می تواند چندین تابع سازنده داشته باشد.

به محض اینکه از روی کلاس یک شی ساخته شد تابع سازنده خود بخود اجرا می شود.

راه ساختن یک سازنده

public نام کلاس

{

}

مثال:

با یک مثال شروع می کنیم . یک کلاس داریم بنام Student تابع سازنده آن را می خواهیم بنویسیم.

class Student

 {

   private int id;

   private string Name;

   private string LastName;

   private int Age;

 }

گفتیم تابع سازنده در سی شارپ تابعی است که دارای سطح دسترسی public است و هم نام با نام کلاس می باشد که می تواند ورودی هم داشته باشد:

class Student
{

  private int ID;
  private string Name;
  private string LastName;
  private int Age;

سازنده کلاس Student……………//

public Student(int id, string name, string lastname)

{
   ID = id;
   Name = name;
   LastName = lastname;
}

//…….سازنده کلاس Student با ورودی متفاوت

public Student(int id, string name, string lastname, int age)

{

   ID = id;
   Name = name;
   LastName = lastname;
   Age = age;

}
}

داخل هر کلاس به صورت پیش فرض یک تابع سازنده به شکل زیر وجود دارد:

public Student( )

//…..هم نام با نام کلاس
{

}

روی پنجره فرم رفته و 2 تا کنترل button روی آن قرار می دهیم:

تابع سازنده در سی شارپ

مشاهده می کنیم که وقتی از روی کلاس Student نمونه می سازیم خود سی شارپ به ما نشان می دهد که دارای پارامترهای ورودی است:

تابع سازنده در سی شارپ

و فلش کنار آن می گوید که دو تا سازنده با پارامتر ورودی وجود دارد:

تابع سازنده در سی شارپ

و وقتی که روی فلش کلیک کنیم پارامترهای سازنده دومی هم به ما نشان می دهد:

private void button1_Click(object sender, EventArgs e)

{
   Student st = new Student(1, “Mahdi”, “Nik”);
}

private void button2_Click(object sender, EventArgs e)

{
   Student st = new Student(1, “Mahdi”, “Nik”,25);
}

نکته:بهترین روش برای اینکه به ورودی هایم دسترسی داشته باشم این است که قبل از اسم متغیرم آندرلاین( _ ) بگذارم یا از کلمه this استفاده کنم.

private int ID;
private string Name;
private string LastName;
private int Age;

public Student(int ID, string Name, string LastName)

{
  this.ID= ID ;
  this.Name = Name;
  this.LastName = LastName;
}

private int _ID;
private string _Name;
private string _LastName;
private int _Age;

public Student(int ID, string Name, string LastName)

{
    _ID= ID ;
    _Name = Name;
    _LastName = LastName;
}

مثال: نوشتن پروژه ماشین حساب با استفاده از تابع سازنده

ابتدا یک کلاس ایجاد می کنیم و داده enum را داخلش می نویسم(). یک کلاس بنام Typeop و وقتی که ایجاد شد نام class را پاک می کنیم و به جای آن enum می نویسیم.

قبل از enum هم حتما public قرار می دهیم

تایع سازنده در سی شارپ

تایع سازنده در سی شارپ

یک کلاس دیگر هم ایجاد می کنیم بنام Calc :

class Calc

{

private int _Num1;
private int _Num2;
private Typeop _op;
public Calc (int Num1,int Num2,Typeop op)
{
_Num1 = Num1;
_Num2 = Num2;
_op = op;
}

public int Run()

{
    int result = 0;
    switch(_op)
      {
           case Typeop.sum: result = _Num1 + _Num2;
               break;

           case Typeop.min: result = _Num1 – _Num2;
               break;

          case Typeop.mul:result = _Num1 * _Num2;
               break;

         case Typeop.div:result = _Num1 / _Num2;
               break;

      }

   return result;

}
}

داخل پنجره فرم شده و کنترل های مورد نیاز را روی آن قرار می دهیم:

private void button1_Click(object sender, EventArgs e)

{

    int n1 = int.Parse(textBox1.Text);
    int n2 = int.Parse(textBox2.Text);
    Calc c = new Calc(n1, n2, Typeop.sum);
    label1.Text = c.Run().ToString();

}

private void button2_Click(object sender, EventArgs e)

{

int n1 = int.Parse(textBox1.Text);
int n2 = int.Parse(textBox2.Text);
Calc c = new Calc(n1, n2, Typeop.min);
label1.Text = c.Run().ToString();

}

private void button3_Click(object sender, EventArgs e)

{

int n1 = int.Parse(textBox1.Text);
int n2 = int.Parse(textBox2.Text);
Calc c = new Calc(n1, n2, Typeop.mul);
label1.Text = c.Run().ToString();

}

private void button4_Click(object sender, EventArgs e)

{

int n1 = int.Parse(textBox1.Text);
int n2 = int.Parse(textBox2.Text);
Calc c = new Calc(n1, n2, Typeop.div);
label1.Text = c.Run().ToString();

}

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

تایع سازنده در سی شارپ

تایع سازنده در سی شارپ

آموزش تابع سازنده در سی شارپ به پایان رسید ولی یک نکته دیگه ای که هست اینه که میتونیم بگیم دو نوع سازنده داریم: سازنده معمولی و سازنده کپی.
با بیان یک مثال این نکته را بیشتر درک می کنیم:

یک کلاس را در نظر می گیریم:

class ClassA
{
public int ID;
public string Name;

سازنده معمولی:

        public ClassA(int ID,string Name)

        {
this.ID = ID;
this.Name = Name;
}

 

سازنده کپی : سازنده ای که پارامتر ورودی آن یک Object  از همان کلاس است.

        public ClassA(ClassA CA)
{
ID = CA.ID;
Name = CA.Name;
}
}

وارد پنجره فرم شده:

private void button1_Click(object sender, EventArgs e)
{
ClassA C = new ClassA(10, “Dazhyar”);
ClassA c2 = new ClassA(C);
MessageBox.Show(c2.ID.ToString()+”\n”+c2.Name);
}

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

مشاهده می کنید که مقدار Object اولی را نمایش می دهد چون من از آبجکت اولی کپی گرفتم به این جور چیزی سازنده کپی می گویند .

تابع مخرب

بعد از اینکه با تابع سازنده آشنا شدیم حالا می خواهیم بدانیم که مخرب چیست.

تعریف تابع مخرب 

مخرب تابعی است که وقتی object می خواهد از حافظه خارج شود خود به خود اجرا می شود بخاطر همین هم هیچ ورودی ندارد.ولی تابع سازنده وقتی که object از کلاس ساخته شد خود به خود سازنده آن اجرا می شود ، ورودی هم می تواند به آن داد. پس در واقعی فضایی که سازنده اختصاص داده بود تابع مخرب از شی می گیرد و آزاد می کند.

راه ساختن یک مخرب

~ نام کلاس

{

}

با یک مثال تابع مخرب را بیان می کنیم:

تابع مخرب

ابتدا از کلاس Student یک نمونه می سازیم:

private void button1_Click(object sender, EventArgs e)

{
Student st = new Student();
}

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

تابع مخرب

روی کنترل button کلیک می کنیم:

تابع مخرب

پیغامی که داخل تابع سازنده نوشته بودیم نمایش داده می شود. وقتی که فرم را بستیم که بخواهیم از برنامه خارج شویم یعنی به محض زدن دگمه پیغام داخل تابع مخرب اجرا می شود:

 

تابع مخرب

همانطور که دیدیم با پیغام هایی که گذاشته بودیم متوجه عملکرد دو تابع شدیم.

امیدواریم از این آموزش استفاده برده باشید و به خوبی با تابع سازنده در سی شارپ و همچنین تابع مخرب آشنا شده باشید. در جلسه بعد هم با آموزش توابع set و get در سی شارپ ما را همراهی کنید.

 

اگر سوال یا انتقادی دارید زیر همین پست در قسمت دیدگاه ها ثبت کنید.