default(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
具有相同的行为?
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
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
IntPtr
是一个值类型,它的默认值确实是IntPtr.Zero
。所以这会如你所期望的那样工作。此 MSDN 页面包含以下引用:
由于
IntPtr
是一个结构体,它的成员将被初始化为0。IntPtr
is a value type, and its default is indeedIntPtr.Zero
. So this will work as you expect.This MSDN page contains the following quote:
Since
IntPtr
is a struct, its members will be initialized to 0.