3

その中に静的クラスと静的メソッドがあるとします。また、10 の異なるクラスからアクセスする必要があります。しかし、静的クラスが誰がそれを呼び出したかをどのように知るか:(

それはインタビューの質問でした....適切に言い換えて答えてください、私は新しいです:(

4

5 に答える 5

2

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);
}
于 2012-07-21T17:17:48.957 に答える
1

私は次のことを試します:

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);

    }
}

ここで実行できる最も簡単な方法は、インスタンスを渡すだけです。

于 2012-07-21T17:12:00.450 に答える
0

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();
  }
}
于 2012-07-21T17:06:15.543 に答える
0

このような場合、Reflectionを使用できます。

これらのリンクでリフレクションの詳細を確認してください: http ://www.csharp-examples.net/reflection-calling-method-name/

http://msdn.microsoft.com/en-us/library/ms173183(v=vs.80).aspx

于 2012-07-21T17:07:26.557 に答える
0

メソッドの機能がそれを呼び出した人に依存している場合、その設計はおそらくあまり良くありません。代わりに新しいパラメータを導入します。

デバッグ目的で、スタック トレース?

于 2012-07-21T18:14:59.357 に答える