2011-01-14 2 views
3

Скажем, у меня есть следующая подпись:Является ли значение по умолчанию (IntPtr) законным в функции extern?

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?

ответ

9

IntPtr - тип значения, и его значение по умолчанию действительно IntPtr.Zero. Так что это будет работать так, как вы ожидаете.

This MSDN page содержит следующую цитату:

Для структур, он будет возвращать каждый член структуры инициализируется в ноль или нуль в зависимости от того, являются ли они значение или ссылочными типами.

Поскольку IntPtr является структурой, его члены будут инициализированы 0.

+0

Reference пожалуйста? Я пытался использовать Google/MSDN:/ – Lazlo

+0

@Lazlo, добавлена ​​ссылка. –