考虑以下 C# 代码:
class Program
{
static public void Print(string toPrint)
{
Console.WriteLine(toPrint);
}
static void Main(string[] args)
{
Type program = typeof(Program);
MethodInfo methodInfo = program.GetMethod("Print", BindingFlags.Static | BindingFlags.Public);
methodInfo.Invoke(null, new object[] { "a" });
}
}
当我在 Visual Studio 2008 或 Visual Studio 2008 中运行它并命中我在“打印”方法中放置的断点时,我在调用堆栈窗口中得到以下信息:
ConsoleApplication4.exe!ConsoleApplication4.Program.Print(string toPrint)
[本机到托管转换]
[管理到本地转换]
ConsoleApplication4.exe!ConsoleApplication4.Program.Main(string[] args)
为什么没有RuntimeMethodInfo.Invoke
出现在我的调用堆栈中?毕竟,它是一种托管方法,那么为什么我看不到我所期望的呢?
另外,一般来说,这里的规则是什么?我的调用堆栈中可能会缺少哪些托管方法?