Исходный код для System.Booleanвеб-сайта Reference Source утверждает, что экземпляры struct Booleanсодержат только одно boolполе 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;
}
Но я заметил это ...
boolявляется С # языка псевдонимом дляSystem.Boolean.- Тип
struct Booleanявляется значением-типом, что означает, что он не может содержать себя в качестве поля . - ... все же этот код предположительно компилируется.
- Я понимаю , что когда
-nostdlibпараметр компилятора установлен вам необходимо предоставить свои собственные основные определения типа нравитсяSystem.String,System.Int32,System.Exception- это единственное различие. - Опубликованный исходный код не содержит других специальных атрибутов, таких как
[MethodImpl( MethodImplOptions.InternalCall )].
Так как этот код компилируется?
boolявляется ключевым словом в языке C #. И компилятор, и среда выполнения имеют много встроенных знаний о типе и не нуждаются в помощи от System.Boolean. Объявления в mscorlib для примитивных типов значений соответствуют коробочному представлению типа.