【发布时间】:2010-11-24 13:55:32
【问题描述】:
从 FW 4.0 开始,IntPtr structure 具有 Add 方法:
public static IntPtr Add(
IntPtr pointer,
int offset
)
这很棒,因为它应该解决我们遇到的所有关于 IntPtr 数学的问题(1、2,可能还有更多)。
但为什么是offset int?
一定不是IntPtr吗?我可以很容易地想象将一个 64 位指针偏移一个超出 int 范围的值。
例如,考虑Marshal.OffsetOf:
public static IntPtr OffsetOf(
Type t,
string fieldName
)
它返回一个IntPtr 作为结构成员的偏移量。这很有意义!而且你不能轻易地使用新的Add 方法来使用这个偏移量。您必须将其转换为 Int64,然后在循环中多次调用 Add。
此外,它似乎扼杀了 IntPtr.Size 与正确编写的应用程序无关的想法。您必须将偏移量转换为特定类型,例如Int64,此时您必须开始管理大小差异。想象一下当 128 位 IntPtr 出现时会发生什么。
我的问题是,为什么?
我的结论是正确的,还是我没有抓住重点?
【问题讨论】:
标签: c# .net .net-4.0 intptr pointer-arithmetic