কিছু দিন আগে এসও: গেটটাইপ () এবং পলিমারফিজম এবং এরিক লিপার্টের উত্তর পড়া নীচের প্রশ্নের উপর ভিত্তি করে আমি ভাবতে শুরু করেছিলাম GetType()যে ভার্চুয়াল না হয়ে আসলেই নিশ্চিত করা হয়েছে যে কোনও বস্তু এর সম্পর্কে মিথ্যা বলতে পারে না Type।
বিশেষত, এরিকের উত্তর নিম্নলিখিতটি বলে:
ফ্রেমওয়ার্ক ডিজাইনাররা একটি অবিশ্বাস্যরূপে বিপজ্জনক বৈশিষ্ট্য যুক্ত করতে যাচ্ছেন না যেমন কোনও বস্তুকে কেবল একই ধরণের অন্য তিনটি পদ্ধতির সাথে সামঞ্জস্য করার জন্য এটির ধরণ সম্পর্কে মিথ্যা বলার অনুমতি দেওয়া হয়।
এখন প্রশ্ন হ'ল: আমি কি এমন কোনও বস্তু তৈরি করতে পারি যা তা অবিলম্বে সুস্পষ্ট না হয়েই তার ধরণের সম্পর্কে মিথ্যা বলে? আমি এখানে গভীর ভুল হতে পারি এবং আমি যদি সে ক্ষেত্রে হয় তবে স্পষ্টতা পছন্দ করতে চাই তবে নীচের কোডটি বিবেচনা করুন:
public interface IFoo
{
Type GetType();
}
এবং বর্ণিত ইন্টারফেসের নিম্নলিখিত দুটি বাস্তবায়ন:
public class BadFoo : IFoo
{
Type IFoo.GetType()
{
return typeof(int);
}
}
public class NiceFoo : IFoo
{
}
তারপরে আপনি যদি নিম্নলিখিত সাধারণ প্রোগ্রামটি চালান:
static void Main(string[] args)
{
IFoo badFoo = new BadFoo();
IFoo niceFoo = new NiceFoo();
Console.WriteLine("BadFoo says he's a '{0}'", badFoo.GetType().ToString());
Console.WriteLine("NiceFoo says he's a '{0}'", niceFoo.GetType().ToString());
Console.ReadLine();
}
অবশ্যই যথেষ্ট পরিমাণে badFooভুল কাজ করেছে Type।
এখন আমি জানি না যে এরিকের এই আচরণটিকে " অবিশ্বাস্যরূপে বিপজ্জনক বৈশিষ্ট্য " হিসাবে বর্ণনা করার উপর ভিত্তি করে এর কোনও গুরুতর প্রভাব রয়েছে কিনা , তবে এই প্যাটার্নটি কি কোনও বিশ্বাসযোগ্য হুমকি হতে পারে?