如何在c#中打印方法的地址?

时间:2014-08-23 17:22:24

标签: c# c

在C编程中,

void foo()
{
}
void main()
{
  printf("%p",foo);
}

将打印foo函数的地址。 如果C#中有一种方法可以实现相同目的,请告诉我。

2 个答案:

答案 0 :(得分:5)

C#是一种高级语言。方法不需要具有“地址” - 这是留给运行时的实现细节。

但是,如果需要与需要方法地址的C代码进行交互(例如,提供对Windows API方法的回调),则可以

  • 创建委托和
  • 检索指向该委托的函数指针。

示例:

static void foo()
{
}

static void Main(string[] args)
{
    Delegate fooDelegate = new Action(foo);

    IntPtr p = Marshal.GetFunctionPointerForDelegate(fooDelegate);

    Console.WriteLine(p);
}

但请注意,您通常不需要此。即使对于前面提到的示例 - 将回调传递给Windows API函数 - 也有more elegant solutions

答案 1 :(得分:0)

在C#方法中不提供地址。在C方法中,地址可用于创建指向函数的指针,这些函数可用于通过将函数传递给接受这些指针的函数来调用函数。在C#中,您可以使用类型安全的委托来实现相同的目的,这些委托也可以包含多个函数...