Rohe Pointer ohne unsafe?
-
Hallo,
ich wundere mich gerade über die Deklaration von
IntPtr
in C#. Wenn ich mir die Definition von diesem anschaue, sieht diese so aus:using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Runtime.Serialization; namespace System { public struct IntPtr : ISerializable { // Rest entfernt, da nicht relevant public IntPtr(void* value); public void* ToPointer(); } }
Ich sehe jetzt hier aber nirgendwo einen
unsafe
Spezifizierer - wie kann dannIntPtr
trotzdem einenvoid*
entgegennehmen oder einen solchen zurückgeben?Wenn ich das mit einer eigenen Klasse versuche, geht das nicht:
struct Test { public void Foo(void *ptr) {} // Fehler: kein 'unsafe' Kontext }
Wie kann das sein? Hält sich C# (bzw dessen Standard-Library) hier nicht an seine eigenen Regeln oder übersehe ich etwas?
-
Guck mal hier:
http://stackoverflow.com/questions/15022637/why-doesnt-intptr-need-the-unsafe-keyword
-
Ok danke