Birkaç gün önce SO: GetType () ve polimorfizm'de birkaç gün önce sorulan şu soruya dayanarak ve Eric Lippert'in cevabını okuyarak , yapmanın GetType()sanal olmaması gerçekten bir nesnenin onun hakkında yalan söyleyemeyeceğini düşünmeye başladım Type.
Eric'in cevabı özellikle şu şekildedir:
Çerçeve tasarımcıları, bir nesnenin türü hakkında yalan söylemesine izin vererek, onu aynı türdeki diğer üç yöntemle tutarlı hale getirmek için inanılmaz derecede tehlikeli bir özellik eklemeyecekler.
Şimdi soru şudur: Bir nesneyi yapabilirsiniz yapar hemen belli olmadan kendi türü hakkında yalan? Burada son derece yanılıyor olabilirim ve durum buysa açıklamayı çok isterim, ancak aşağıdaki kodu göz önünde bulundurun:
public interface IFoo
{
Type GetType();
}
Ve söz konusu arayüzün aşağıdaki iki uygulaması:
public class BadFoo : IFoo
{
Type IFoo.GetType()
{
return typeof(int);
}
}
public class NiceFoo : IFoo
{
}
Ardından aşağıdaki basit programı çalıştırırsanız:
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();
}
Yeterince emin badFoobir hatalı çıktı verir Type.
Şimdi, Eric'in bu davranışı " inanılmaz derecede tehlikeli bir özellik " olarak tanımlamasına dayanarak bunun ciddi sonuçları olup olmadığını bilmiyorum , ancak bu model inandırıcı bir tehdit oluşturabilir mi?