【发布时间】:2010-11-16 03:11:56
【问题描述】:
我将首先在代码中解释我的场景:
public class A { }
public class B : A { }
public class C : B { }
public class D { }
public class Test
{
private A a = new A ( ) ;
private B b = new B ( ) ;
private C c = new C ( ) ;
private D d = new D ( ) ;
public Test ( )
{
// Evaluates to "false"
if ( a.GetType == typeof(B) ) { } //TODO: Add Logic
// Evaluates to "true"
if ( b.GetType == typeof(B) ) { } //TODO: Add Logic
// I WANT this to evaluate to "true"
if ( c.GetType == typeof(B) ) { } //TODO: Add Logic
// Evaluates to "false"
if ( d.GetType == typeof(B) ) { } //TODO: Add Logic
}
}
这里需要注意的重要一点是:
if ( c.GetType == typeof(B) ) { }
我相信这实际上会评估为“假”,因为 typeof(B) 和 typeof(C) 在两个方向上都不相等。 (C 是 B,但 B 不一定是 C。)
但我需要的是某种考虑到这一点的条件。如何判断一个对象是 B 还是从它派生的任何东西?
我不在乎它是否是从 B 派生的对象,只要基 B 类在那里。而且我无法预料我的应用程序中可能会出现什么派生类。我只需要假设将来可能存在未知的派生类——因此我只能专注于确保基类是我所期望的。
我需要一个条件来为我执行此检查。这如何实现?
【问题讨论】:
-
你应该尽可能避免这种逻辑。当您必须确定对象的派生类型是什么时,您并没有很好地利用多态性。
-
查看我对 Steven Sudit 回答的评论。
标签: c# .net inheritance typeof