假设我有以下签名:
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
具有相同的行为吗?
答案 0 :(得分:9)
IntPtr
是一种值类型,其默认值确实为IntPtr.Zero
。所以这将按预期工作。
This MSDN page包含以下引用:
对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型。
由于IntPtr
是一个结构,因此其成员将初始化为0.