2012-02-27 11 views
1

は、我々はリターンを持っているの文trueの場合、我々は次のコードが派生し、基本タイプの差別

Base() { ... } 

Derived : Base { ... } 

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

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

ザ・を持っていると言うことができます。派生インスタンスで作業しているときに、派生型と基本型を区別するにはどうすればよいですか。

本質的に、上記のif文がfalseを返すようにしたいが、これを達成する方法がわからない。

+0

これは意味をなさないものです。あなたは正確に何を達成しようとしていますか? – asawyer

+0

これは、OOの仕組みです:基底クラスが期待されるあらゆる場所で使用可能な基底クラスISを拡張することによって派生したクラスです。つまり、派生IS基底です。 – vulkanino

+0

@vulkanino。しかし、いくつかのタイプをチェックしたいと思っています... 'Equals'と同じようにmetohd – gdoron

答えて

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

1

typeofを使用して、インスタンスのタイプを確認します。

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

isチェックインスタンスがそのタイプであるか(またはパラメータがInterfaceある場合Interfaceを実装する)に由来する場合ザ・オペレータが使用される

MSDN:

オブジェクトの実行時の型が与えられた型と互換性があるかどうかを調べる。 is演算子は式の式で使用されます

関連する問題