默认(IntPtr)在extern函数中是否合法?

Laz*_*zlo 3 c# null intptr

假设我有以下签名:

static extern void External(int foo, IntPtr bar);
Run Code Online (Sandbox Code Playgroud)

我想让它使用默认值:

static extern void External(int foo = 10, IntPtr bar = default(IntPtr));
Run Code Online (Sandbox Code Playgroud)

这有效吗?在C++中,我会使用指针为0或null.在C#中,IntPtr是值还是引用甚至都不清楚.

如果我手动调用我的函数,我会使用External(10, IntPtr.Zero);.我想我的问题是:default(IntPtr)会有同样的行为IntPtr.Zero吗?

JSB*_*ոգչ 9

IntPtr是一个值类型,它的默认值确实如此IntPtr.Zero.所以这将按预期工作.

此MSDN页面包含以下引用:

对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型.

由于IntPtr是结构,其成员将初始化为0.