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