Начиная с FW 4.0, структура IntPtr
имеет метод 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
.
Мой вопрос здесь, почему?
Я прав в своих выводах, или я упускаю суть?