2012-02-27 50 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運算符用於表達式