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

时间:2011-01-14 00:25:18

标签: c# null intptr

假设我有以下签名:

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

我想让它使用默认值:

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

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

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

1 个答案:

答案 0 :(得分:9)

IntPtr是一种值类型,其默认值确实为IntPtr.Zero。所以这将按预期工作。

This MSDN page包含以下引用:

  

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

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