CodeShot
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 به بعد دیگر درست نیست.

شرکت‌هایی که این سؤال را پرسیده‌اند

اسنپدیجی‌کالا