如何静态类的静态方法就知道来电者?(How the static class's stati

2019-09-19 23:15发布

想象一下,我有一个静态类和内部的静态方法。 它必须由10个不同的类别进行访问。 但如何静态类会知道是谁把它称为:(

这是一个面试问题....请妥善改换回答我,我是新:(

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

    }
}

刚好路过一个实例是,你可以在这里做最简单的。



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


Answer 3:

您可以使用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();
  }
}


Answer 4:

在这种情况下,你可以使用反射。

了解更多有关反射下,这些链接: http://www.csharp-examples.net/reflection-calling-method-name/

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



Answer 5:

如果一个方法的功能是依赖于谁把它称为,那么设计可能不是很好。 我会介绍新的参数来代替。

为了调试的目的,一个堆栈跟踪?



文章来源: How the static class's static method will know the caller?