微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 结构向实例大小添加任何开销?

具体来说,如果我创建一个具有单个字段的结构体,那么这个结构实质上就是围绕这个值的包装器,可以将这个结构传递给一个预期为底层类型的 P/Invoke方法吗?

我正在使用一个本地库,其API涉及到很多指针到struct类型,我想使用比IntPtr更有类型的东西来保持它们的一致性,通过将IntPtr包装在通用结构体中.会工作吗(已经完成了吗?)

解决方法

那么不要把它当成一个结构体.

而不是通过P / Invoke直接了解如何直接执行此操作,只需将P / Invoke方法保留为私有,并公开将直接使用包装器类型的公共方法,并处理您需要执行的任何传递方式.然后,您的代码只会使用这些公共方法,而不必担心不安全的结构:)

混合不同的类型,并期待他们神奇地工作是灾难的秘诀.让自己明确,不要依赖隐藏和隐含的强制投降.

最好的事情是,它允许你很容易地使用一些实际上是安全的指针包装器 – 你可以把它作为参考,如果它丢失了,你可以根据需要使用一个终结器去处理非托管资源.看看SafeHandle和它的后代如何为一个伟大的样品工作.

原文地址:https://www.jb51.cc/csharp/97758.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐