default(IntPtr) 在外部函数中合法吗?

发布于 2024-10-11 15:17:38 字数 415 浏览 1 评论 0原文

假设我有以下签名:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绮烟 2024-10-18 15:17:38

IntPtr 是一个值类型,它的默认值确实是 IntPtr.Zero。所以这会如你所期望的那样工作。

此 MSDN 页面包含以下引用:

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

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

IntPtr is a value type, and its default is indeed IntPtr.Zero. So this will work as you expect.

This MSDN page contains the following quote:

For structs, it will return each member of the struct initialized to zero or null depending on whether they are value or reference types.

Since IntPtr is a struct, its members will be initialized to 0.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文