2012-02-27 37 views
1

比方说,我们有以下的代码派生和基地型分化

Base() { ... } 

Derived : Base { ... } 

Main() 
{ 
    var derivedInstance = new Derived(); 

    if(derivedInstance is Base) 
    { 
     DoStuff(); 
    } 
} 

if语句,我们必须返回true。当我使用派生实例工作时,如何区分派生类型和基类型。

基本上,我想要上面的if语句返回false,但不知道如何完成此操作。

+0

这没有任何意义。你究竟想要完成什么? – asawyer 2012-02-27 14:31:10

+0

这是OO的工作原理:通过扩展基类IS的派生类可在任何地方使用基类,因此Derived IS Base。 – vulkanino 2012-02-27 14:32:50

+0

@vulkanino。但有些时候你想检查类型......就像'Equals' metohd – gdoron 2012-02-27 14:35:50

回答

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()的实例,不检查它的类型。

+0

这正是我所需要的。我正在做一个数据库保存操作,我检查了这个类型并且对它进行了保存,问题是,保存操作将它保存为基本类型而不是派生类型。谢谢 – Craig 2012-02-27 14:54:47

1

使用typeof它检查什么是实例的类型。

if (derivedInstance.GetType() == typeof(Base)) 
{ 
    DoStuff(); 
} 

is检查该实例是一种类型的或从它衍生(或实现Interface如果参数是一个Interface

MSDN:

被用于操作员检查对象的运行时类型是否与给定类型兼容。 is运算符用于表达式