2015-09-03 5 views
7

Я нашел булеву исходный код на http://referencesource.microsoft.com/#mscorlib/system/boolean.cs:Почему Boolean не бросает исключение StackOverflowException?

public struct Boolean 
{ 
    ... 
    private bool m_value; 
    ... 
} 

почему не бросить StackOverflowException?

+1

Вы должны объяснить, почему вы думаете, что это будет. – csmckelvey

+1

@Takendarkk bool include bool include a bool include a bool include a bool include a bool include a bool ........ omg – Cologler

+2

Нет, булевский включает в себя bool. – csmckelvey

ответ

4

Причина этого в том, что типы bool и System.Boolean на самом деле разные.

Примитивный тип bool - это встроенный тип, в котором хранится 1 байт.

Тип System.Boolean служит в качестве обертки объектов для примитивного типа и реализует интерфейсы IComparable и IConvertable. Эта оболочка реализована так, чтобы точно представлять примитивный тип, чтобы они могли стать логически взаимозаменяемыми.

В качестве пользователей платформы .NET Framework, основанных на системе Common Type, мы просто говорим о них как о том же, потому что в нашем случае компилятор C# рассматривает ключевое слово «bool» как псевдоним для типа System.Boolean которые вы видите в mscorlib.dll.

+1

, когда я использую тип bool в своем коде, какой из них я использую? – Cologler

+0

Я уверен, что вы используете тип System.Boolean, когда вы не указываете параметр компилятора/nostdlib, ссылаясь на mscorlib.dll как правило. – Biscuits

+0

Интересно, где «Перейти к определению» на этом 'bool' возьмет вас ... В любом коде он приведет вас к определению' Boolean', так же как 'int' перенесет вас в' Int32'. – Andrew

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