۱۴۰۴/۰۷/۰۹ Nebular

کلاس‌ها و ارث‌بری در سی شارپ

۱. کلاس‌ها و ارث‌بری

1.1 sealed

  • کاربرد: جلوگیری از ارث‌بری کلاس.
  • وقتی یک کلاس sealed باشد، هیچ کلاسی نمی‌تواند از آن ارث‌بری کند.
  • استفاده معمولاً وقتی است که نمی‌خواهیم رفتار کلاس تغییر کند یا برای بهینه‌سازی عملکرد (JIT optimization).

مثال:

sealed class MyClass
{
    public void Show() => Console.WriteLine("Hello");
}

// خطا! ارث‌بری از کلاس sealed ممکن نیست
// class Child : MyClass {}

1.2 abstract

  • کاربرد: پایه برای کلاس‌های دیگر، نمی‌توان مستقیماً نمونه ساخت.
  • می‌تواند متد abstract داشته باشد (بدون بدنه) که کلاس مشتق باید آن را پیاده‌سازی کند.

مثال:

abstract class Animal
{
    public abstract void MakeSound(); // متد abstract
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Woof");
    }
}

// امکان ساخت نمونه مستقیم وجود ندارد
// Animal a = new Animal(); // ❌ خطا

نکته: کلاس abstract می‌تواند متد معمولی هم داشته باشد، نه فقط abstract.


1.3 virtual, override, new (پلی‌مورفیسم)

virtual + override

  • متدی که virtual تعریف شود، قابل بازنویسی در کلاس مشتق است.
  • استفاده از override در کلاس مشتق، نسخه‌ی جدید را جایگزین نسخه‌ی پایه می‌کند.
class Base
{
    public virtual void Show() => Console.WriteLine("Base Show");
}

class Derived : Base
{
    public override void Show() => Console.WriteLine("Derived Show");
}

Base b = new Derived();
b.Show(); // خروجی: Derived Show → پلی‌مورفیسم واقعی

new

  • اگر یک متد در کلاس مشتق با new تعریف شود، متد پایه مخفی می‌شود.
  • تفاوت: اگر از مرجع نوع پایه استفاده شود، نسخه پایه اجرا می‌شود.
class Base
{
    public void Show() => Console.WriteLine("Base Show");
}

class Derived : Base
{
    public new void Show() => Console.WriteLine("Derived Show");
}

Base b = new Derived();
b.Show(); // خروجی: Base Show
Derived d = new Derived();
d.Show(); // خروجی: Derived Show

نکته: newپلی‌مورفیسم رخ نمی‌دهد، فقط مخفی‌سازی انجام می‌دهد.


۲. Access Modifiers (سطوح دسترسی)

Modifierتوضیح
privateپیش‌فرض داخل کلاس، فقط در همان کلاس دسترسی دارد
protectedدسترسی در کلاس و کلاس‌های مشتق
internalدسترسی در همان assembly
protected internalدسترسی در کلاس مشتق یا همان assembly
publicدسترسی از هر جای برنامه

مثال:

class MyClass
{
    private int a = 1;         // فقط داخل کلاس قابل دسترسی
    protected int b = 2;       // داخل کلاس و مشتق
    internal int c = 3;        // داخل assembly فعلی
    public int d = 4;          // از هرجا قابل دسترسی
}
  • پیش‌فرض اعضای کلاس private هستند، مگر آن‌که سطح دسترسی مشخص شود.

✅ نکات مهم آزمونی:

  1. sealed → هیچ ارث‌بری نیست.
  2. abstract → متد abstract دارد و نمونه مستقیم نمی‌توان ساخت.
  3. virtual + override → پلی‌مورفیسم واقعی.
  4. new → مخفی‌سازی متد، پلی‌مورفیسم رخ نمی‌دهد.
  5. Access modifiers → پیش‌فرض private، internal فقط در همان assembly، protected فقط برای مشتق‌ها.
Accept Cookies
Accept Cookies
[your-shortcode]