در حال بارگذاری...

سازنده‌ها و مخرب‌ها

سازنده‌ها (Constructors) و مخرب‌ها (Destructors) در سی‌شارپ اجزای حیاتی برنامه‌نویسی شیءگرا هستند که چرخه عمر یک شیء را مدیریت می‌کنند. سازنده‌ها متدهایی ویژه هستند که به‌صورت خودکار هنگام ایجاد یک شیء فراخوانی می‌شوند و وظیفه مقداردهی اولیه به متغیرهای عضو و آماده‌سازی شیء برای استفاده را دارند. استفاده صحیح از سازنده‌ها تضمین می‌کند که شیء در یک وضعیت معتبر آغاز شود و از بروز خطاهای منطقی جلوگیری شود.
مخرب‌ها در زمان جمع‌آوری حافظه توسط Garbage Collector فراخوانی می‌شوند و هدف اصلی آن‌ها آزادسازی منابع غیرمدیریتی مانند فایل‌ها، کانکشن‌های شبکه و دیتابیس است. در پروژه‌های پیشرفته، ترکیب مخرب‌ها با اینترفیس IDisposable و بلوک using امکان مدیریت قطعی منابع را فراهم می‌کند.
در این آموزش، شما با سینتکس دقیق سازنده‌ها و مخرب‌ها، بهترین شیوه‌ها، مدیریت خطاها و جلوگیری از مشکلات رایج مانند نشت حافظه آشنا خواهید شد. همچنین یاد خواهید گرفت که چگونه اصول OOP مانند کپسوله‌سازی و مسئولیت واحد را در پروژه‌های سی‌شارپ پیاده‌سازی کنید. این مهارت‌ها برای توسعه برنامه‌های مقیاس‌پذیر و پایدار در محیط‌های واقعی بسیار حیاتی هستند.

مثال پایه

text
TEXT Code
using System;

class Person
{
public string Name;
public int Age;

// سازنده
public Person(string name, int age)
{
Name = name;
Age = age;
Console.WriteLine("شیء با موفقیت ساخته شد.");
}

// مخرب
~Person()
{
Console.WriteLine("شیء در حال تخریب است.");
}

public void Display()
{
Console.WriteLine($"نام: {Name}, سن: {Age}");
}

}

class Program
{
static void Main()
{
Person p1 = new Person("علی", 28);
p1.Display();

Person p2 = new Person("زهرا", 32);
p2.Display();
}

}

در این مثال، کلاس Person دارای دو فیلد Name و Age است. سازنده Person(string name, int age) به‌طور خودکار هنگام ایجاد شیء فراخوانی می‌شود و فیلدها را مقداردهی اولیه می‌کند تا شیء در وضعیت پایدار آغاز شود. مخرب \~Person() زمانی توسط Garbage Collector فراخوانی می‌شود که شیء از حافظه حذف شود و معمولاً برای آزادسازی منابع غیرمدیریتی کاربرد دارد. متد Display اطلاعات شیء را نمایش می‌دهد. این مثال نشان می‌دهد که چگونه می‌توان از سازنده‌ها و مخرب‌ها برای مدیریت چرخه عمر شیء و منابع استفاده کرد و همچنین رعایت شیوه‌های استاندارد سی‌شارپ مانند نام‌گذاری PascalCase و جلوگیری از نشت حافظه انجام شده است.

مثال کاربردی

text
TEXT Code
using System;

class FileManager : IDisposable
{
private string filePath;
private System.IO.StreamWriter writer;

// سازنده
public FileManager(string path)
{
filePath = path;
try
{
writer = new System.IO.StreamWriter(filePath);
Console.WriteLine($"فایل {filePath} باز شد.");
}
catch (Exception ex)
{
Console.WriteLine($"خطا در باز کردن فایل: {ex.Message}");
}
}

public void Write(string data)
{
if (writer != null)
{
writer.WriteLine(data);
Console.WriteLine("داده با موفقیت نوشته شد.");
}
}

// مخرب
~FileManager()
{
Dispose(false);
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (writer != null)
{
writer.Close();
writer = null;
Console.WriteLine($"فایل {filePath} بسته شد.");
}
}
}

}

class Program
{
static void Main()
{
using (FileManager fm = new FileManager("data.txt"))
{
fm.Write("سلام دنیا");
}
}
}

در این مثال پیشرفته، سازنده FileManager فایل موردنظر را باز می‌کند و StreamWriter را مقداردهی اولیه می‌کند. متد Write داده‌ها را با اطمینان به فایل می‌نویسد. مخرب \~FileManager() برای آزادسازی منابع غیرمدیریتی فراخوانی می‌شود، در حالی که IDisposable و بلوک using مدیریت قطعی منابع را تضمین می‌کنند و GC.SuppressFinalize عملکرد بهتری ارائه می‌دهد. این الگو OOP، مدیریت استثنا و چرخه عمر شیء را در پروژه‌های واقعی به‌خوبی نمایش می‌دهد.

بهترین شیوه‌ها و اشتباهات رایج در سی‌شارپ برای سازنده‌ها و مخرب‌ها:
سازنده‌ها را به مقداردهی اولیه و اعتبارسنجی محدود کنید و از عملیات پیچیده یا زمان‌بر پرهیز کنید. مخرب‌ها فقط برای آزادسازی منابع غیرمدیریتی استفاده شوند. پیاده‌سازی IDisposable تضمین می‌کند که منابع هم مدیریت شده و هم غیرمدیریتی به‌صورت ایمن آزاد شوند.
اشتباهات رایج شامل عدم مدیریت خطاها در سازنده، وابستگی بیش از حد به مخرب برای آزادسازی منابع و عملیات پیچیده در سازنده است. برای رفع خطاها، می‌توان از لاگ‌های Garbage Collector و ابزارهای دیباگینگ استفاده کرد. برای بهینه‌سازی، شیءهای بزرگ را با دقت اختصاص دهید و عملیات مخرب را سبک نگه دارید. امنیت شامل مدیریت داده‌های حساس و Thread Safety است.

📊 جدول مرجع

سی‌شارپ Element/Concept Description Usage Example
سازنده مقداردهی اولیه به فیلدهای شیء public Person(string name){ Name=name; }
سازنده Overload پشتیبانی از چندین حالت مقداردهی اولیه public Person(string name,int age){ Name=name; Age=age; }
مخرب آزادسازی منابع غیرمدیریتی \~Person(){ /* آزادسازی منابع */ }
IDisposable آزادسازی دستی منابع class FileManager:IDisposable{ public void Dispose(){ /* بسته شدن فایل */ } }
using مدیریت اتوماتیک منابع using(var fm=new FileManager("data.txt")){ fm.Write("..."); }

خلاصه و گام‌های بعدی:
سازنده‌ها و مخرب‌ها در مدیریت چرخه عمر شیء و منابع غیرمدیریتی در سی‌شارپ حیاتی هستند. سازنده‌ها شیء را در وضعیت پایدار آغاز می‌کنند و مخرب‌ها و IDisposable منابع را ایمن آزاد می‌کنند.
گام بعدی شامل یادگیری سازنده‌های استاتیک، الگوهای طراحی مانند Singleton و Factory، و مدیریت منابع پیشرفته مانند آزادسازی غیرهمزمان و Thread Safety است. تمرین با فایل‌ها، دیتابیس و شبکه به تسلط بیشتر کمک می‌کند. منابع اضافی شامل مستندات رسمی مایکروسافت و کتاب‌های پیشرفته C# هستند.

🧠 دانش خود را بیازمایید

آماده شروع

آزمون دانش شما

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

4
سوالات
🎯
70%
برای قبولی
♾️
زمان
🔄
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود