How to print Address of a method in c#?

后端 未结 2 1064
不知归路
不知归路 2021-01-29 02:04

In C Programming,

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

will print the address of foo function. Please let me know if there is a

相关标签:
2条回答
  • 2021-01-29 02:11

    In C# methods don't provide address. In C method addresses are available to create pointers to functions that can be used to alternatively call functions by passing them to functions that accept these pointers. In C# you could achieve the same using delegates that are typesafe and these delegates can contain multiple functions too...

    0 讨论(0)
  • 2021-01-29 02:25

    C# is a high-level language. A method does not need to have an "address" -- this is an implementation detail left to the runtime.

    However, if you need to interface with C code that requires a method address (for example, to provide a callback to a Windows API method), you can

    • create a delegate and
    • retrieve a function pointer to that delegate.

    Example:

    static void foo()
    {
    }
    
    static void Main(string[] args)
    {
        Delegate fooDelegate = new Action(foo);
    
        IntPtr p = Marshal.GetFunctionPointerForDelegate(fooDelegate);
    
        Console.WriteLine(p);
    }
    

    Note, though, that you usually won't need this. Even for the aforementioned example -- passing a callback to a Windows API function -- there are more elegant solutions.

    0 讨论(0)
提交回复
热议问题