3

私が次の署名を持っているとしましょう:

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

デフォルトを使用したい:

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

これは有効ですか?C++ では、ポインタを 0 または null に使用します。C# では、IntPtr が値なのか参照なのかさえ明確ではありません。

関数を手動で呼び出す場合は、 を使用しますExternal(10, IntPtr.Zero);。私の質問は次のとおりだと思います:default(IntPtr)と同じ動作をしIntPtr.Zeroますか?

4

1 に答える 1

9

IntPtrは値型であり、そのデフォルトは実際にはIntPtr.Zero. したがって、これは期待どおりに機能します。

この MSDN ページには、次の引用が含まれています。

構造体の場合、構造体の各メンバーが値型か参照型かに応じて、ゼロまたは null に初期化されて返されます。

は構造体であるためIntPtr、そのメンバーは 0 に初期化されます。

于 2011-01-14T00:26:19.947 に答える