その中に静的クラスと静的メソッドがあるとします。また、10 の異なるクラスからアクセスする必要があります。しかし、静的クラスが誰がそれを呼び出したかをどのように知るか:(
それはインタビューの質問でした....適切に言い換えて答えてください、私は新しいです:(
その中に静的クラスと静的メソッドがあるとします。また、10 の異なるクラスからアクセスする必要があります。しかし、静的クラスが誰がそれを呼び出したかをどのように知るか:(
それはインタビューの質問でした....適切に言い換えて答えてください、私は新しいです:(
C# には適切なメタオブジェクト システムがないため、私が知っている唯一の方法はリフレクションを使用することです。次のアイデアはアイデアを与えるはずです:
public static string GetCaller()
{
var trace = new StackTrace(2);
var frame = trace.GetFrame(0);
var caller = frame.GetMethod();
var callingClass = caller.DeclaringType.Name;
var callingMethod = caller.Name;
return String.Format("Called by {0}.{1}", callingClass, callingMethod);
}
私は次のことを試します:
public class ParentClass
{
}
public class ChildClass : ParentClass
{
}
public static class StaticClass
{
public static void SomeMethod(ParentClass d)
{
var t = d.GetType();
}
}
public class StaticChildren
{
public void Children()
{
var p = new ChildClass();
StaticClass.SomeMethod(p);
}
}
ここで実行できる最も簡単な方法は、インスタンスを渡すだけです。
stracktaceを使用して、静的メソッドを呼び出したユーザーを見つけることができます。
class Foo
{
public void static staticMethod()
{
// here i want to know who called me!
StackTrace st = new StackTrace();
...
}
}
class Bar
{
public void Bar()
{
Foo.staticMethod();
}
}
このような場合、Reflectionを使用できます。
これらのリンクでリフレクションの詳細を確認してください: http ://www.csharp-examples.net/reflection-calling-method-name/
http://msdn.microsoft.com/en-us/library/ms173183(v=vs.80).aspx
メソッドの機能がそれを呼び出した人に依存している場合、その設計はおそらくあまり良くありません。代わりに新しいパラメータを導入します。
デバッグ目的で、スタック トレース?