2011-01-14 7 views
3

Lassen Sie uns sagen, ich habe die folgende Signatur:Ist der Standardwert (IntPtr) in einer externen Funktion zulässig?

static extern void External(int foo, IntPtr bar); 

Ich möchte es Vorgaben machen verwenden:

static extern void External(int foo = 10, IntPtr bar = default(IntPtr)); 

Ist das gültig? In C++ würde ich den Zeiger verwenden, um 0 oder Null zu sein. In C# ist nicht einmal klar, ob IntPtr ein Wert oder eine Referenz ist. Wenn ich meine Funktion manuell aufgerufen habe, würde ich External(10, IntPtr.Zero); verwenden. Ich denke, meine Frage ist: Wird default(IntPtr) das gleiche Verhalten wie IntPtr.Zero haben?

Antwort

9

IntPtr ist ein Werttyp, und sein Standardwert ist in der Tat IntPtr.Zero. Das wird so funktionieren, wie Sie es erwarten.

This MSDN page enthält das folgende Zitat:

Für structs, es wird jedes Mitglied der Struktur auf Null oder null je nach initialisiert zurückgeben, ob sie Wert oder Referenztypen.

Seit IntPtr ist eine Struktur, seine Mitglieder bitte auf 0

+0

Referenz initialisiert werden? Ich habe versucht, Google/MSDN es:/ – Lazlo

+0

@Lazlo, Link hinzugefügt. –

Verwandte Themen