Является ли значение по умолчанию (IntPtr) допустимым во внешней функции? - PullRequest
3 голосов
/ 14 января 2011

Допустим, у меня есть следующая подпись:

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

Я хочу использовать его по умолчанию:

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

Это действительно? В C ++ я бы использовал указатель как 0 или ноль. В C # даже неясно, является ли IntPtr значением или ссылкой.

Если бы я вызвал свою функцию вручную, я бы использовал External(10, IntPtr.Zero);. Наверное, мой вопрос: будет ли default(IntPtr) вести себя так же, как IntPtr.Zero?

1 Ответ

9 голосов
/ 14 января 2011

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

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

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

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

...