3

Let's say I have the following signature:

static extern void External(int foo, IntPtr bar);

I want to make it use defaults:

static extern void External(int foo = 10, IntPtr bar = default(IntPtr));

Is this valid? In C++, I would use the pointer to be 0 or null. In C#, it's not even clear if IntPtr is value or reference.

If I called my function manually, I would use External(10, IntPtr.Zero);. I guess my question is: Will default(IntPtr) have the same behavior as IntPtr.Zero?

Lazlo
  • 8,518
  • 14
  • 77
  • 116

1 Answers1

9

IntPtr is a value type, and its default is indeed IntPtr.Zero. So this will work as you expect.

This MSDN page contains the following quote:

For structs, it will return each member of the struct initialized to zero or null depending on whether they are value or reference types.

Since IntPtr is a struct, its members will be initialized to 0.

JSBձոգչ
  • 40,684
  • 18
  • 101
  • 169