【问题标题】:how to get name of the function called in the class through its constructor如何通过其构造函数获取类中调用的函数的名称
【发布时间】:2014-07-08 12:40:00
【问题描述】:

我有课

public class ApplicationClass
{
    public  ApplicationClass() 
    {
        // Some code here                   

        public bool Check() 
        {
            // some code here

        }
    }
}

我在点击事件中调用Check函数

protected void CheckFunction_Click(object sender, EventArgs e)
{
    new ApplicationClass().Check();
}

现在在ApplicationClass 构造函数中,我想获取有关被调用函数的名称和参数(如果有)的信息,即Check 函数。

如何获得这些详细信息?

我想保存所有被调用的函数。我可以将它放在一个地方,而不是在每个函数上都调用函数吗? 它不一定必须在构造函数中。

【问题讨论】:

  • 你为什么想知道?这是一个糟糕的设计。
  • 您希望它如何工作?在构造函数期间,该类正在创建,因此它不知道您当时调用了Check
  • @JohnSaunders 我想保存所有被调用的函数。我可以将它放在一个地方,而不是在每个函数上都调用函数吗?
  • @James 还有其他方法可以得到吗?我不想让代码在每个函数中保存函数名
  • 你打算如何处理函数名?

标签: c#


【解决方案1】:

这是不可能的。也许看起来是因为符号。这就是您的代码扩展为:

protected void CheckFunction_Click(object sender, EventArgs e)
{
    var temp = new ApplicationClass();
    temp.Check();
}

如果您只想调用类的方法而不需要实例,您可能想要使用静态方法 - 至少您的示例看起来像它。当然,初始化必须在其他地方或在静态构造函数中完成。静态构造函数只被调用一次!

public static bool Check() 
{
    // some code here
}

ApplicationClass.Check();

如果您需要有关调用当前方法的方法的信息,您可以使用。

System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace();

请注意,获取堆栈跟踪可能会被认为很慢,不应在循环或性能关键代码中使用它。

【讨论】:

  • 不可能。你无法在构造函数中获取Check的信息,因为它还没有被调用。
  • 对,我没有正确解释描述。嗯..会更新答案。
【解决方案2】:

这是不可能的。如果反过来,您可以使用StackTrace 类来检查调用的内容,但如前所述,现在情况并非如此。 (如果你先调用Check,那么它就会出现在堆栈中)

您可以选择使用ExpressionLamdbaExpression 类来检索呼叫信息。

查看来自 Get the name of a method using an expression 的问题和答案,了解 Expressions 的用途。

【讨论】:

  • @vignesh:需要更多帮助?
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多