সি # 8 এ ডিফল্ট ইন্টারফেস পদ্ধতির আচরণ কেন পরিবর্তিত হয়েছে? অতীতে নিম্নলিখিত কোডটি (যখন ডিফল্ট ইন্টারফেস পদ্ধতিগুলি ডেমো প্রকাশিত হত না):
interface IDefaultInterfaceMethod
{
// By default, this method will be virtual, and the virtual keyword can be here used!
virtual void DefaultMethod()
{
Console.WriteLine("I am a default method in the interface!");
}
}
interface IOverrideDefaultInterfaceMethod : IDefaultInterfaceMethod
{
void IDefaultInterfaceMethod.DefaultMethod()
{
Console.WriteLine("I am an overridden default method!");
}
}
class AnyClass : IDefaultInterfaceMethod, IOverrideDefaultInterfaceMethod
{
}
class Program
{
static void Main()
{
IDefaultInterfaceMethod anyClass = new AnyClass();
anyClass.DefaultMethod();
IOverrideDefaultInterfaceMethod anyClassOverridden = new AnyClass();
anyClassOverridden.DefaultMethod();
}
}
নিম্নলিখিত আউটপুট আছে:
কনসোল আউটপুট:
আমি ইন্টারফেসে একটি ডিফল্ট পদ্ধতি!
আমি একটি ওভাররাইড ডিফল্ট পদ্ধতি!
তবে সি # 8 শেষ সংস্করণ দিয়ে উপরের কোডটি নিম্নলিখিত আউটপুট উত্পাদন করছে:
কনসোল আউটপুট:
আমি একটি ওভাররাইড ডিফল্ট পদ্ধতি!
আমি একটি ওভাররাইড ডিফল্ট পদ্ধতি!
যে কেউ আমাকে বোঝাতে পারে কেন এই আচরণটি পরিবর্তিত হয়?
বিঃদ্রঃ:
IDefaultInterfaceMethod anyClass = new AnyClass(); anyClass.DefaultMethod();
((IDefaultInterfaceMethod) anyClass).DefaultMethod(); // STILL the same problem!??
Cut base() syntax for C# 8. We intend to bring this back in the next major release.
। এটি সঠিকভাবে কাজ করতে রানটাইম সমর্থন প্রয়োজন হবে।
virtual
আমি? এবং সম্ভবত একটি উত্তরাধিকার হীরা পরিচয় করিয়ে দেওয়া হচ্ছে