🏗 سازندهها (Constructors) در #C: معمار آبجکتهای شما
هر آبجکتی در #C یه "لحظه تولد" داره. اون لحظه، کدی اجرا میشه که آبجکت رو برای زندگی آماده میکنه. به این کد جادویی میگن سازنده (Constructor).
سازنده، اولین متدیه که موقع ساختن یک نمونه جدید از کلاس با کلمه کلیدی new اجرا میشه. امروز میخوایم با تمام زیر و بم این معماران آبجکت آشنا بشیم.
1️⃣ سازنده چیست و چطور کار میکند؟
سازنده شبیه یک متده، با این تفاوت که اسمش دقیقاً هماسم خود کلاس هست و هیچ نوع خروجیای (حتی void) نداره. کار اصلیش، مقداردهی اولیه فیلدها و آمادهسازی آبجکته.
public class Panda
{
string _name; // فیلد
// این سازنده است
public Panda(string name)
{
_name = name; // کد مقداردهی اولیه
}
}
// ... نحوه استفاده
Panda p = new Panda("Petey"); // سازنده اینجا صدا زده میشه
💡نکته حرفهای: برای سازندههای تکخطی، میتونید از سینتکس Expression-bodied استفاده کنید:
public Panda(string name) => _name = name;
ترفند this: اگه اسم پارامتر با اسم فیلد یکی بود، میتونید با کلمه کلیدی this به فیلد کلاس اشاره کنید:
public Panda(string name) => this.name = name;
2️⃣ اورلودینگ و زنجیرهای کردن سازندهها (this):
شما میتونید چندین سازنده با ورودیهای مختلف (Overloading) داشته باشید. برای جلوگیری از تکرار کد، یک سازنده میتونه اون یکی رو با کلمه کلیدی : this(...) صدا بزنه.
public class Wine
{
public decimal Price;
public int Year;
public Wine(decimal price)
{
Price = price;
}
// این سازنده، قبل از اجرای بدنه خودش، سازنده بالایی رو صدا میزنه
public Wine(decimal price, int year) : this(price)
{
Year = year;
}
}
3️⃣ تلهی سازنده پیشفرض! ⚠️
قانون مهم: کامپایلر #C فقط و فقط زمانی که شما هیچ سازندهای در کلاس تعریف نکرده باشید، یه سازنده عمومی بدون پارامتر ( ()public MyClass) براتون میسازه.
به محض اینکه شما حتی یک سازنده (با یا بدون پارامتر) بنویسید، اون سازنده اتوماتیک حذف میشه و اگه بهش نیاز دارید، باید خودتون دستی بنویسیدش. این یکی از خطاهای رایج برای تازهکارهاست!
4️⃣ ترتیب اجرا: اول فیلدها، بعد سازنده
اگه فیلدهاتون مقدار اولیه دارن، این مقداردهی همیشه قبل از اجرای اولین خط کد در سازنده و به ترتیب تعریفشون در کلاس انجام میشه.
class Player
{
int shields = 50; // این اول اجرا میشه
int health = 100; // این دوم اجرا میشه
public Player()
{
// این سوم اجرا میشه
Console.WriteLine("Constructor executed!");
}
}
5️⃣ کاربرد حرفهای: سازندههای private
چرا باید یه سازنده رو private کنیم؟ برای اینکه کنترل کامل ساخت آبجکت رو به دست بگیریم! این الگو (که بهش Factory Method میگن) به ما اجازه میده که منطق ساخت رو داخل یه متد استاتیک قرار بدیم. مثلا برای پیادهسازی الگوی Singleton یا برگردوندن آبجکت از یک Pool.
public class MyApiClien
{
// سازنده خصوصیه، پس کسی از بیرون نمیتونه new کنه
private MyApiClient() { }
// فقط از طریق این متد استاتیک میشه نمونه ساخت
public static MyApiClient Create()
{
// ... منطق پیچیده برای ساخت و کانفیگ ...
return new MyApiClient();
}
}
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #OOP #Constructor #BestPractices