2016-10-21 6 views
1

私はC#の新機能を使用していますが、すでに答えられている質問を私のものと似ていますが、私の質問に答えることができませんでした。C#クラスがXであるかどうかを確認する、またはXから継承する

だから、 私はすべてのゲームオブジェクトのスーパークラスであるはずの "インスタンス"クラスを持っています。 これは、読み取り専用のように定義classNameプロパティがあります。

public string ClassName 
    { 
     get 
     { 
      return this.GetType().Name; 
     } 
    } 

をそして、この質問のための私の理由は、私は現在のオブジェクトがクラス名のインスタンスである場合はtrueを返します次のメソッドを持つようにしたいということですかオブジェクトのクラスがclassNameから継承する場合

public bool IsA(string className) 
    { 
     //TODO 
    } 

これは、ソートの "再帰的" にする必要があるので、その場合はだった場合: X:クラス1:クラス2:CLASS4は 、その後X.IsA(CLASS4)を返す場合は、true

I object.GetType()のようなメソッドを調べましたが、解決策を見つけられませんでした。

アイデア?

+0

これは、ソートの「再帰的」にする必要があるので、その場合はだった場合:X:クラス1:クラス2:CLASS4その後、X .IsA(Class4)はtrueを返します – Elmub

+0

重複したスレッドの受け入れられた答えから取られます:*インスタンスが__inheritanceツリー内にある場合、 'is'は' true'を返します*関連ドキュメント:[C#リファレンス](https: //msdn.microsoft.com/en-us/library/scekt9xw.aspx)。 – sstan

+0

はい私はそれだけでもそれを読むが、1つの問題は依然として続き、私のパラメータはクラスではない文字列です – Elmub

答えて

1

isまたはasステートメントを使用してください。 asはターゲットにキャストしようとしますが、失敗すると(メモリから)NULLになります。

ここでは簡単linqpadデモは(VSためConsole.Out.Write("yep");"yep".Dump()"を置き換え)です:

void Main() 
{ 
    var b = new bar(); 

    if (b is foo) 
     "yep".Dump(); 
    else 
     "nope".Dump(); 

    var b2 = new bar(); 
    var b3 = b2 as foo; 
    // you can check if b3 is null, or if not, use it a foo. 

} 


class foo {} 

class bar : foo {} 
+0

あなたは 'as 'を使用すると言いますが、使用中は表示しません。 – mason

+0

"b is foo"は、たとえばbがfooが継承するクラスから継承されているかどうかをチェックしますか? – Elmub

+2

@ user3524922何が最初にドキュメントをチェックできないのですか? – zerkms

関連する問題