2012-01-25 15 views
0

私は静的クラスを持っています。このメソッドは、別のクラスのインスタンスから呼び出されます。どのインスタンスがメソッドを追加せずにメソッドを呼び出したかをどのように知ることができますか?どのメソッドからオブジェクトを呼び出すのか?

例:

static class SomeStaticClass 
{ 
public static void SomeGreatMethod (/*NO PARAMETERS*/) 
{ 
    LittleClass caller = //How to obtain caller instance here? 
} 
} 

class LittleClass 
{ 
public void SomeMethod() 
{ 
    //some code 
    SomeStaticClass.SomeGreatMethod (/*NO PARAMETERS*/); 
} 
} 
+0

呼び出し元をパラメータとして追加したくない特別な理由はありますか? –

答えて

2

あなたが潜在的にクラスは、スタックトレースを作成することによって、呼び出し元のメソッドが含まれているかを調べることができます - インライン化が混乱これをアップすることができますが。

のインスタンスがデバッグAPIを使用していない限り、呼び出すことができません。

のいずれかをとする必要がある場合は、おそらく設計上の問題が発生している可能性があります。セキュリティを課すのに似たようなことをするフレームワークのいくつかの領域がありますが、それはかなりまれなケースです。通常、その情報がSomeGreatMethodに必要な場合は、それを単に呼び出しの一部として提供するか、非staticクラスのインスタンスメソッドにして、適切なコンテキスト情報を提供するだけです。

0

を使用する必要が時々私はこの

private static Type GetCallingMethodHolderType() 
{ 
    const int iCallDeepness = 0; //can vary this ... 
    System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(false); 
    System.Diagnostics.StackFrame sframe = stack.GetFrame(iCallDeepness); 
    return sframe.GetMethod().ReflectedType; //This will return a TYPE which holds the method. 
} 
を使用

編集

私は、呼び出し元メソッドを保持するオブジェクトのTYPEを返すために投稿を編集しました。 インスタンス、あなたがリクエストしたように、それを得ることはできません。

はあなたに適していますか?

+1

彼らは呼び出し元のメソッド名を要求していませんが、呼び出し元のインスタンスの後ろです。 –

+0

@ChrisMcAtackney:thx、反映されたTYPEに修正されました。 – Tigran

関連する問題