مشخصات مقاله
-
3136
-
5.0
-
22841
-
2
-
1
آموزش Constructor و destructor در زبان C#
اگه با برنامهنویسی شیءگرا در C# کار کرده باشی، احتمالاً تا الان با مفهوم کلاس و شیء یا Object آشنا شدی. اما وقتی میخوایم از یک کلاس، یک شیء بسازیم، خیلی وقتها لازمه همون اول بعضی از مقدارها رو مشخص کنیم. مثلاً فرض کنید یک کلاس Car داریم و میخوایم وقتی ماشین ساخته میشه، رنگش هم از همون ابتدا مشخص باشه. اینجاست که تابع سازنده یا Constructor به کارمون میاد.
توی این مطلب میخوایم ببینیم Constructor در C# دقیقاً چه کاری انجام میده، چطور میتونیم برای یک کلاس چند Constructor داشته باشیم و چطور یک Constructor میتونه Constructor دیگهای رو صدا بزنه. بعد از اون هم سراغ تابع تخریبکننده یا Destructor میریم تا ببینیم وقتی یک Object دیگه موردنیاز نیست، چه اتفاقی براش میافته.
آموزش کار با تابع سازنده Constructor در زبان C# :
Constructor یا تابع سازنده، یک متد ویژه در کلاس هست که وقتی از روی اون کلاس یک شیء میسازیم، به صورت خودکار اجرا میشه. پس هر بار که یک Object جدید ایجاد میکنیم، Constructor مربوط به اون کلاس هم اجرا خواهد شد. معمولاً از Constructor برای مقداردهی اولیه متغیرها یا انجام کارهایی استفاده میکنیم که باید همون لحظه ساخته شدن شیء انجام بشن.
یک نکته مهم اینه که Constructor هیچ مقدار خروجی یا return نداره. به همین دلیل موقع تعریفش، هیچ نوع دادهای قبل از نام Constructor قرار نمیدیم. شکل کلی تعریف تابع سازنده در کلاسهای C# به صورت زیره:
public ClassName()
مثلاً اگه کلاس ما Car باشه، میتونیم یک Constructor ساده برای اون به شکل زیر تعریف کنیم:
public Car()
حالا در مثال عملی این درس، یک کلاس به نام Car داریم که Constructor اون یک پارامتر متنی از نوع String دریافت میکنه. اما یک کلاس مجبور نیست فقط یک Constructor داشته باشه. در C# میتونیم Constructorها رو overload کنیم؛ یعنی چند Constructor با نام یکسان داخل یک کلاس داشته باشیم، ولی تعداد یا نوع پارامترهای ورودی اونها با هم فرق داشته باشه. برای مثال:
public Car()
{
}
public Car(string color)
{
this.color = color;
}
در این مثال دو Constructor برای کلاس Car داریم. اولی هیچ پارامتری دریافت نمیکنه و دومی یک پارامتر به نام color داره. بنابراین بسته به اینکه موقع ساخت Object چه اطلاعاتی در اختیار داشته باشیم، میتونیم از Constructor مناسب استفاده کنیم.
اما یک حالت دیگه هم وجود داره. یک Constructor میتونه Constructor دیگهای از همون کلاس رو فراخوانی کنه. برای این کار در C# از this() استفاده میکنیم. مثال زیر رو ببینید:
public Car()
{
Console.WriteLine("Constructor with no parameters called!");
}
public Car(string color) : this()
{
this.color = color;
Console.WriteLine("Constructor with color parameter called!");
}
اگه این مثال رو اجرا کنید، میبینید که اول Constructor بدون پارامتر اجرا میشه و بعد Constructor دارای پارامتر اجرا خواهد شد. دلیلش هم اینه که در تعریف Constructor دوم، از this() استفاده کردیم. در واقع با این کار به C# میگیم قبل از اجرای این Constructor، Constructor بدون پارامتر همین کلاس رو اجرا کن.
حالا اگه بخوایم به جای Constructor بدون پارامتر، یک Constructor دارای پارامتر رو فراخوانی کنیم، میتونیم پارامتر موردنظر رو داخل this() قرار بدیم. مثلاً:
public Car(string color) : this()
{
this.color = color;
Console.WriteLine("Constructor with color parameter called!");
}
public Car(string param1, string param2) : this(param1)
{
}
نکته: اگه Constructor دارای 2 پارامتر رو فراخوانی کنید، پارامتر اول برای فراخوانی Constructor دارای 1 پارامتر استفاده میشه.
آموزش کار با تابع تخریبکننده یا Destructor در C# :
حالا بریم سراغ Destructor یا تابع تخریبکننده. Destructor متدی هست که وقتی یک شیء از کلاس از بین میره، اجرا میشه. در C# مدیریت حافظه به صورت خودکار انجام میشه و Garbage Collector وظیفه داره Objectهایی رو که دیگه در برنامه مورد استفاده نیستن، شناسایی کنه و حافظه مربوط به اونها رو آزاد کنه.
با این حال، بعضی وقتها ممکنه لازم باشه وقتی یک Object از بین میره، یک سری کارهای Clean up هم انجام بشه. اینجاست که Destructor میتونه به کار بیاد.
البته Destructor مثل متدهای معمولی C# نیست و نحوه تعریفش هم با اونها فرق داره. برای مثال، یک Destructor برای کلاس Car رو میتونیم به صورت زیر تعریف کنیم:
~Car()
{
Console.WriteLine("Out..");
}
در این مثال، وقتی Object ساختهشده از کلاس توسط Garbage Collector جمعآوری بشه، Destructor مربوط به اون اجرا خواهد شد.
اگه میخوای C# رو از پایه و به صورت اصولی یاد بگیری، میتونی مسیر یادگیریت رو با دوره آموزش C# ادامه بدی و مباحث این زبان رو قدمبهقدم یاد بگیری.