El código System.Booleanfuente del sitio web de la Fuente de referencia establece que las instancias struct Booleancontienen solo un boolcampo private bool m_value:
https://referencesource.microsoft.com/#mscorlib/system/boolean.cs,f1b135ff6c380b37
namespace System {
using System;
using System.Globalization;
using System.Diagnostics.Contracts;
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Boolean : IComparable, IConvertible
#if GENERICS_WORK
, IComparable<Boolean>, IEquatable<Boolean>
#endif
{
private bool m_value;
internal const int True = 1;
internal const int False = 0;
internal const String TrueLiteral = "True";
internal const String FalseLiteral = "False";
public static readonly String TrueString = TrueLiteral;
public static readonly String FalseString = FalseLiteral;
}
Pero me di cuenta de que ...
booles un alias de lenguaje C # paraSystem.Boolean.- El tipo es el
struct Booleanque es un tipo de valor, lo que significa que no puede contenerse como un campo . - ... sin embargo, este código probablemente compila.
- Yo entiendo que cuando la
-nostdlibopción del compilador se establece lo necesario para proporcionar a sus propios esenciales definiciones de tipos comoSystem.String,System.Int32,System.Exception- esa es la única diferencia. - El código fuente publicado no contiene otros atributos especiales como
[MethodImpl( MethodImplOptions.InternalCall )].
Entonces, ¿cómo se compila este código?
booles una palabra clave en el lenguaje C #. Tanto el compilador como el tiempo de ejecución tienen mucho conocimiento incorporado sobre el tipo y no necesitan ayuda de System.Boolean. Las declaraciones en mscorlib para los tipos de valores primitivos coinciden con la representación en recuadro del tipo.