【问题标题】:How to get the class name which is calling another class static funcaion [duplicate]如何获取调用另一个类静态函数的类名[重复]
【发布时间】:2012-03-18 21:55:32
【问题描述】:

可能重复:
Retrieving the calling method name from within a method (C#)

我有一个班级说A,其中有一个名为Func1的方法;这个函数是静态的。 现在还有一些其他类说BC使用A.Func1

如何获取包含正在调用的函数的类名?

public class A  
{  
    public static void Func1()  
    {  
    // who called me?  
    }  
}  

public class B  
{  
    public void CallFunc()  
    {  
        A.Func1();  
    }  
}

public class C
{  
    public void AlsoCallFunc()  
    {  
        A.Func1();  
    }  
}

【问题讨论】:

  • 澄清问题,发布一些代码,帮助我们帮助你..
  • 请参阅:stackoverflow.com/questions/615940/… - 但是,我强烈建议您删除此需求;这些技术充其量是脆弱的。几乎任何其他设计都会更可取。
  • 实际上,我的情景是,在我的班级里有一个事件,在这个事件中,有一些基于调用 winform 的计算,这就是我需要这个的原因。
  • Marc 是对的——这是你能找到的最难闻的代码气味之一。不要这样做。
  • 如果你有一个事件处理程序,它的第一个参数是发送者。也许您可以使用该发件人来获取呼叫表单。

标签: c# oop


【解决方案1】:

如果您需要使用表单并想知道正在调用哪个表单,请使用事件和发送者

【讨论】:

    【解决方案2】:

    也许你会使用

    的输出
    Environment.StackTrace
    

    【讨论】:

      【解决方案3】:

      可以使用StackTrace 类来获取此类信息。

      为了获取调用方法名,我有时会使用这个函数。 但你需要检查它是否适用于你的具体情况

      private static string GetCallingMethodName()
      {        
          const int iCallDeepness = 2; 
          System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(false);
          System.Diagnostics.StackFrame sframe = stack.GetFrame(iCallDeepness);
          return sframe.GetMethod().Name;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        • 2020-02-20
        • 1970-01-01
        • 2015-02-13
        • 2013-06-08
        • 2016-07-02
        • 2018-05-23
        相关资源
        最近更新 更多