Ab FW 4.0, die IntPtr
structure hat die Add
Methode:Die neue Methode IntPtr.Add - fehle ich den Punkt des Int?
public static IntPtr Add(
IntPtr pointer,
int offset
)
Das ist sehr gut, da es hatten alle diese Fragen auf IntPtr
Mathematik zu adressieren angenommen hat, wir (1, 2, wahrscheinlich mehr).
Aber warum ist das offset
int
?
Muss es nicht IntPtr
sein? Ich kann mir leicht vorstellen, einen 64-Bit-Zeiger um einen Wert zu versetzen, der außerhalb des Bereichs int
liegt.
Betrachten wir zum Beispiel Marshal.OffsetOf
:
public static IntPtr OffsetOf(
Type t,
string fieldName
)
Es gibt einen IntPtr
als Offset zu dem Strukturelement. Was macht Sinn! Und Sie können diesen Offset nicht einfach mit der neuen Methode Add
verwenden. Sie müssten es in Int64
umwandeln und dann Add
mehrmals in einer Schleife aufrufen.
Auch scheint es zu töten die Idee von IntPtr.Size
irrelevant für eine ordnungsgemäß geschriebene Anwendung. Sie müssen den Versatz auf einen bestimmten Typ umwandeln, z. B. Int64
. An diesem Punkt müssen Sie mit dem Verwalten des Größenunterschieds beginnen. Und was passiert, wenn 128-Bit IntPtr
erscheint.
Meine Frage hier ist, warum?
Bin ich in meinen Schlussfolgerungen richtig, oder fehlt mir der Punkt?