Juniorسختی 2 از ۵· در 91٪ مصاحبههای این حوزه پرسیده شده
تفاوت Interface و Abstract Class در C# چیست؟
☆نشان کردنپاسخ کوتاه
Interface فقط قرارداد است و یک کلاس میتواند چند Interface پیاده کند؛ Abstract Class میتواند پیادهسازی و حالت مشترک داشته باشد اما ارثبری از آن فقط یکی است.
پاسخ کامل
| ویژگی | Interface | Abstract Class |
|---|---|---|
| ارثبری چندگانه | ✅ | ❌ |
| فیلد و حالت (State) | ❌ | ✅ |
| سازنده (Constructor) | ❌ | ✅ |
| سطح دسترسی اعضا | از C# 8 قابل تعیین | کامل |
| پیادهسازی پیشفرض | از C# 8 (Default Interface Method) | همیشه |
قاعده انتخاب: اگر رابطه «میتواند این کار را بکند» است (IDisposable، IComparable)
از Interface استفاده کنید؛ اگر رابطه «یک نوعی از» است و کد مشترک وجود دارد،
Abstract Class مناسبتر است.
مثال کد
public interface INotifier
{
Task SendAsync(string message);
}
public abstract class NotifierBase : INotifier
{
protected readonly ILogger Logger;
protected NotifierBase(ILogger logger) => Logger = logger;
public abstract Task SendAsync(string message);
}
نکته مهم
از C# 8 به بعد Interface میتواند پیادهسازی پیشفرض داشته باشد، اما همچنان نمیتواند فیلد نمونه (Instance Field) داشته باشد.
اشتباه رایج
❌ گفتن اینکه «Interface هیچ پیادهسازیای ندارد» — این از C# 8 به بعد دیگر درست نیست.
شرکتهایی که این سؤال را پرسیدهاند
اسنپدیجیکالا
