2016-12-20 4 views
5

私は親クラスと子クラスだと仮定します。とGetChildName()現在のよう宣言するクラスの名前を取得しますか?

public abstract class Parent 
{ 
    public string GetParentName() 
    { 
     return GetType().Name; 
    } 
} 

public class Child : Parent 
{ 
    public string GetChildName() 
    { 
     return GetType().Name; 
    } 
} 

、両方GETPARENTNAMEを()子供を返します。

私のシナリオでは、メソッドが宣言されているクラスの名前を取得したいと思います。

したがってGetChildName()しかしGETPARENTNAME()を返す必要が返すべきです。

これはどのような手段で可能ですか?

注:

私はメソッドGetType()を使用することができることを理解しBaseType.Nameが、階層が複雑になる可能性があるので、この は動作しません。

+0

'私は' * GetChildName'、この方法は、私は彼らが二つの異なる方法であることを意味declared'されているクラスの名前を取得したいのですが子で宣言されています – Jonesopolis

+2

[反映を使用して呼び出し元のメソッド名と型を取得するにはどうすればよいですか?](http://stackoverflow.com/questions/3095696/how-do-i-get-the-calling- method-name-and-type-using-reflection) – MethodMan

+2

あなたは単純に "親"を返すことができます。文字列litteralを返すことが適切でない例を教えてください。 – Winter

答えて

6

あなたはこれが欲しい、私は思う:

return MethodBase.GetCurrentMethod().DeclaringType.Name; 
+0

これは、関数の外のどこかから宣言型を取得したい場合にも使用できます: typeof(Child).GetMembers()。最初(m => m.Name == "GetParentName" ).DeclaringType.Name –

+0

これは私が必要としていたものでした - ありがとう! –

関連する問題