让我们说我们有以下代码
Base() { ... }
Derived : Base { ... }
Main()
{
var derivedInstance = new Derived();
if(derivedInstance is Base)
{
DoStuff();
}
}
我们的if语句返回true。当我使用派生实例时,如何区分派生类型和基类型。
基本上,我希望上面的if语句返回false,但不确定如何完成此操作。
答案 0 :(得分:5)
尝试
if (derivedInstance.GetType() == typeof(Base)) {
DoStuff();
}
然而,这看起来很奇怪。你想做什么?
如何在基类中定义虚拟方法:
class Base {
public virtual void DoStuff() {
// actually do something
}
}
class Derived {
public virtual override void DoStuff() {
// do nothing
}
}
然后你可以在实例上调用DoStuff()
,而无需检查它的类型。
答案 1 :(得分:1)
使用typeof
检查实例的类型。
if (derivedInstance.GetType() == typeof(Base))
{
DoStuff();
}
is
检查实例是否属于类型或从中派生(如果参数为Interface
,则实现Interface
)
is运算符用于检查对象的运行时类型是否与给定类型兼容。 is运算符用于表单
的表达式