امشب به تاریخ ۲۰ مهر، سؤالی در مورد ارثبری، 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 چه خروجیهایی خواهیم گرفت.
اگر برای شما هم این مبحث جذاب شده است، به سؤال اصلی مراجعه کنید.