۱۴۰۴/۰۷/۰۹
کلاسها و ارثبری در سی شارپ
۱. کلاسها و ارثبری
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 هستند، مگر آنکه سطح دسترسی مشخص شود.
✅ نکات مهم آزمونی:
- sealed → هیچ ارثبری نیست.
- abstract → متد abstract دارد و نمونه مستقیم نمیتوان ساخت.
- virtual + override → پلیمورفیسم واقعی.
- new → مخفیسازی متد، پلیمورفیسم رخ نمیدهد.
- Access modifiers → پیشفرض
private، internal فقط در همان assembly، protected فقط برای مشتقها.
Accept Cookies
[your-shortcode]