Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找调用该方法的类_C# - Fatal编程技术网

C# 查找调用该方法的类

C# 查找调用该方法的类,c#,C#,大家好 这个项目有两个班 头等舱是一种形式,就像这样 public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void Form3_Load(object sender, EventArgs e) { } } } //还有像这样的课 pub

大家好 这个项目有两个班 头等舱是一种形式,就像这样

  public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        private void Form3_Load(object sender, EventArgs e)
        {

        }
    }
}
//还有像这样的课

public class Sample
{
public void MyMethod()
{
//My Codes
}
}
现在我想知道 当我调用Form3中的
MyMethod
或其他类时,我想了解哪个类称为
MyMethod
? 谢谢。

1)在MyMethod()中设置断点

2) 运行应用程序

3) 等待断点到达

4) 看看这条线索

或:

1) 在MyMethod中引发并捕获异常

2) 打印异常堆栈跟踪(在MyMethod()中放置断点)

2) 运行应用程序

3) 等待断点到达

4) 看看这条线索

或:

1) 在MyMethod中引发并捕获异常


2) 打印异常stacktrace

在运行时,您可以使用以下代码检查方法名称和声明类型

 StackTrace trace=new StackTrace();
            StackFrame[] stackFrames = trace.GetFrames();
            foreach (var stackFrame in stackFrames)
            {
                string methodName= stackFrame.GetMethod().Name;
                string declearingClass=stackFrame.GetMethod().DeclaringType.Name;

            }
您可以跳过第一帧,以准确地知道从何处调用函数

StackFrame[] stackFrames = trace.GetFrames().Skip(1).ToArray();

在运行时,您可以使用以下代码检查方法名称和声明类型

 StackTrace trace=new StackTrace();
            StackFrame[] stackFrames = trace.GetFrames();
            foreach (var stackFrame in stackFrames)
            {
                string methodName= stackFrame.GetMethod().Name;
                string declearingClass=stackFrame.GetMethod().DeclaringType.Name;

            }
您可以跳过第一帧,以准确地知道从何处调用函数

StackFrame[] stackFrames = trace.GetFrames().Skip(1).ToArray();

接受类型对象作为参数之一

public class Sample
{
    public void MyMethod(Type CallerType)
    {
        //My Codes 
    } 
} 
当您调用该方法调用时

SampleObj.MyMethod(this.gettype());

接受类型对象作为参数之一

public class Sample
{
    public void MyMethod(Type CallerType)
    {
        //My Codes 
    } 
} 
当您调用该方法调用时

SampleObj.MyMethod(this.gettype());

在visual studio中,右键单击
MyMethod
->查找所有引用


或者,按住CTRL-K,R键并将光标放在方法上。

在visual studio中,右键单击
MyMethod
->查找所有引用


或者,在运行时按住CTRL-K,R键并将光标放在方法上。

?或者这是为了调试“我想知道哪个类叫做myMethod”是什么意思?原因是什么?可能重复的我将使用一些关于类的信息称为方法。比如当Form3类调用该方法时,我将使用MyMethod()中的一个变量{(Form)CalledForm=…CalledForm.Title=“Sample”}稍微类似的线程。在运行时?或者这是为了调试“我想知道哪个类叫做myMethod”是什么意思?原因是什么?可能重复的我将使用一些关于类的信息称为方法。比如当Form3类调用该方法时,我将使用MyMethod()中的一个变量{(Form)CalledForm=…CalledForm.Title=“Sample”}稍微类似的线程。我将使用一些关于类被称为方法的信息。比如当Form3类调用该方法时,我将在MyMethod()中使用它一个变量{(Form)CalledForm=…CalledForm.Title=“Sample”}我所能说的就是,添加一个@Chilaka所说的
Type
参数。这是最安全的方法。我将使用一些关于类的信息来调用该方法。就像Form3类调用该方法一样,我将在MyMethod()中使用它作为变量{(Form)CalledForm=…CalledForm.Title=“Sample”}我所能说的就是,添加一个@Chilaka所说的
Type
参数。这是最安全的路线,但很危险。请参阅John Skeet的答案和用户评论。但这很危险。请参阅John Skeet的答案和用户评论。这是真的,但我可以将其设置为不必要发送参数吗?如果您能告诉您的确切senario,我们可以尝试一些解决方法。如果您不想传递参数,您可以尝试Lnt3的回答这是正确的,但我可以让它不需要发送参数吗?如果您能告诉您的确切的senario,我们可以尝试一些解决方法。如果不想传递参数,可以尝试Lnt3的答案