如何通过其构造函数获取类中调用的函数的名称

时间:2014-07-08 12:40:00

标签: c#

我有一个班级

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函数的信息。

我如何获得这些细节?

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

这是不可能的。如果是相反的方式,你可以使用StackTrace类来检查被调用的内容,但正如所说的那样,现在情况并非如此。 (如果你先调用Check,它就会出现在堆栈上)

您可以选择使用ExpressionLamdbaExpression类来检索通话信息。

查看Get the name of a method using an expression的问题和答案,了解表达式如何方便。