اطلاعات خود در مورد ارث‌بری را محک بزنید
200, OK
https://stackoverflow.com:443/questions/64295242/unexpected-behavior-of-a-c-sharp-8-0-default-interface-member icon
امشب به تاریخ ۲۰ مهر، سؤالی در مورد ارث‌بری، interface و abstract class در سایت محبوب همگی ما، StackOverFlow منتشر شد. سؤال حاکی از رفتار عجیب قطعه کد زیر در نسخه ۸ سی‌شارپ است. تا به اینجا برای سؤال مذکور، یک پاسخ با اعتماد به نقس بالایی ارائه شد و پس از مدت اندکی حذف گردیده است.

interface I {
    string M1() => "I.M1";
    string M2() => "I.M2";
}

abstract class A : I {}

class C : A {
    public string M1() => "C.M1";
    public virtual string M2() => "C.M2";
}

class Program {
    static void Main() {
        I obj = new C();
        System.Console.WriteLine(obj.M1());
        System.Console.WriteLine(obj.M2());
    }
}
نظر شما در مورد نحوه عملکرد چیست؟ در صورت استفاده از کلمه کلیدی‌های new و override چه خروجی‌هایی خواهیم گرفت.
اگر برای شما هم این مبحث جذاب شده است، به سؤال اصلی  مراجعه کنید.
اطلاعات خود در مورد ارث‌بری را محک بزنید
  • #
    ‫۳ سال و ۱۰ ماه قبل، دوشنبه ۲۱ مهر ۱۳۹۹، ساعت ۰۲:۴۶
    وقتی که Default Implementation قرار دهیم برای متد‌ها در اینترفیس و موقع نمونه سازی از کلاس مربوطه، object reference آن را در یک متغیر از جنس اینترفیسی که پیاده سازی کرده است قرار دهیم، همان پیاده سازی‌های پیشفرض اجرا میشوند.
    در اصل به صورت Explicit Cast کار میکند ( برای مثال فرخوانی یک متد Virtual از کلاس پدر با وجود اینکه همان متد را خودمان یکبار override ) کرده ایم.