2014-09-16 3 views
0

Интересно, как я могу получить 0 за default(int). Я попытался найти значение по умолчанию в Int32 struct с ILSpy, но ничего не видел.реализация ключевого слова по умолчанию в C#

Может кто-нибудь объяснить механика за ключевым словом по умолчанию, как он работает?

+2

[Таблица значений по умолчанию] (http://msdn.microsoft.com/en-gb/library/83fhsxwc.aspx) – Sayse

+0

Могу ли я посмотреть на эту таблицу в .NET framework с помощью ILSpy или это в компиляторе? – ogun

+4

Если вас интересуют низкоуровневые аспекты того, как C# переводит 'default (...)' в IL, взгляните на [этот вопрос SO] (http://stackoverflow.com/questions/10400358/how-to- translate-defaultsometype-from-c-sharp-to-cil) и [этот подробный ответ на это Эрик Липперт] (http://stackoverflow.com/a/10400998/240733). – stakx

ответ

0

Ключевое слово по умолчанию возвращает значение по умолчанию, которое задается при определении, но не назначении поля.

public class Program 
{ 
    int someInt; 
    string someStr; 
} 

В приведенном выше примере, someInt будет установлен в 0 и someStr будет null. Те же значения, которые возвращаются при использовании default(int) или default(string).

Вы не можете изменить поведение в классах, потому что возвращаемое значение по умолчанию всегда будет null. Поэтому вместо этого вы можете посмотреть на structs.

+0

Это только что-то. Значение 'default (T)' зависит исключительно от 'T', а не от некоторого поля (и его типа), которому присвоено результирующее значение. При этом, изображая результат «дефолта», этот путь по крайней мере объясняет имя оператора. (И можно добавить, что поле с типизированным значением, которое никогда не будет установлено явно, будет неявно инициализировано, если все его биты будут установлены в 0.) – stakx

+0

@stakx Я не пытался подразумевать, что у него были отношения с полями экземпляра. Не стесняйтесь редактировать мою формулировку :) –

Смежные вопросы