3

假设我有以下签名:

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吗?

4

1 回答 1

9

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

此 MSDN 页面包含以下引用:

对于结构,它将返回结构的每个成员,根据它们是值类型还是引用类型,初始化为零或空。

由于IntPtr是一个结构,它的成员将被初始化为 0。

于 2011-01-14T00:26:19.947 回答