2015-09-03 11 views
7

Ho trovato booleana codice sorgente su http://referencesource.microsoft.com/#mscorlib/system/boolean.cs:Perché Boolean non lancia una StackOverflowException?

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

perché lo fa non gettare uno StackOverflowException?

+1

Dovresti spiegare perché pensi che lo farebbe. – csmckelvey

+1

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

+2

No, un booleano include un bool. – csmckelvey

risposta

4

Il motivo per cui questo funziona è perché i tipi bool e System.Boolean sono in realtà diversi.

Il tipo di bool primitivo è un tipo predefinito che memorizza 1 byte.

Il tipo System.Boolean funge da object wrapper per il tipo primitivo e implementa le interfacce IComparable e IConvertable. Questo wrapper è implementato per rappresentare da vicino il tipo primitivo in modo che possano diventare logicamente intercambiabili.

Come utenti di .NET Framework che si basano sul Common Type System, parliamo semplicemente di loro come se fossero gli stessi perché, nel nostro caso, il compilatore C# tratta la parola chiave "bool" come alias per il tipo System.Boolean che vedi implementato in mscorlib.dll.

+1

quando uso il tipo di bool nel mio codice, quale in realtà utilizzo? – Cologler

+0

Sono abbastanza sicuro che stai usando il tipo System.Boolean quando non specifichi l'opzione del compilatore/nostdlib, facendo riferimento a mscorlib.dll normalmente. – Biscuits

+0

Mi chiedo dove "Vai alla definizione" su quel 'bool' ti porterebbe ... In qualsiasi codice ti porta alla definizione' Boolean', proprio come 'int' ti porta a' Int32'. – Andrew

Problemi correlati