Console.WriteLine(12.GetType().BaseType);
К тому же, поскольку все типы значений имеют конструктор, заданный по умолчанию, можно создавать системные типы с помощью ключевого слова new, в результате чего переменной, к тому же, будет присвоено значение по умолчанию. Хотя использование ключевого слова new при создании типов данных System выглядит несколько "неуклюжим", следующая конструкция оказывается в C# синтаксически правильной.
// Следующие операторы эквивалентны.
bool b1 = new bool(); // b1= false.
bool b2 = false;
Кстати, заметим, что можно создавать системные типы данных, используя абсолютные имена.
// Следующие операторы также семантически эквивалентны.
System.Вoоl b1 = new System.Bool(); // b1 = false.
System.Bool sb2 = false;
Эксперименты с числовыми типами данных
Числовые типы .NET поддерживают свойства MaxValue и МinValue, сообщающие информацию о диапазоне данных, которые может хранить данный тип. Предположим, что мы создали несколько переменных типа System.UInt16 (unsigned short – короткое целое без знака), как показано ниже.
static void Main(string[] args) {
System.Uint16.myUInt16 = 300000;
Console.WriteLine("Максимум для UInt16: {0} ", UInt16. MaxValue);
Console.WriteLine("Минимум для UInt16: {0} ", UInt16. MinValue);
Console.WriteLine("Значение равно: {0} ", myUInt16);
Console.WriteLine("Я есть: {0} ", myUInt16. GetType());
// Теперь для сокращения System.UInt16 (т.e для ushort).
ushort myOtherUInt16 = 12000;
Console.WriteLine("Максимум для UInt16: {0} ", ushort. MaxValue);
Console.WriteLine("Минимум для UInt16: {0} ", ushort. MinValue);
Console.WriteLine("Знaчение равно: {0} ", myOtherUInt16);
Console.WriteLine("Я есть: {0} ", myotherUInt16. GetType());
Console.ReadLine();
}
Вдобавок к свойствам MinValue/MaxValue системные типы могут определять другие полезные члены. Например, тип System.Double позволяет получить значения Epsilon и Infinity.
Console.WriteLine(" -› double.Epsilon: {0}", double. Epsilon);
Console.WriteLine("-› double.РositiveInfinitу: {0} ", double. PositiveInfinity);
Console.WriteLine("-› double.NegativeInfinity: {0}", double. NegativeInfinity);
Console.WriteLine("-› double.MaxValue: {0}", double. MaxValue);
Console.WriteLine("-› double.MinValue: {0}", double. MinValue);
Теперь рассмотрим тип данных System.Boolean. В отличие от C(++), в C# единственными возможными значениями для bool являются {true | false}. В C# вы не можете назначать типу bool импровизированные значения (например, -1, 0, 1), что считается (большинством программистов) правильным нововведением. С учетом этого должно быть понятно, почему System.Boolean не поддерживает свойства MinValue/MaxValue, а поддерживает TrueString/FalseString.
// В C# нет произвольных типов Boolean!
bool b = 0 ; // Недопустимо!
bool b2 = -1; // Также недопустимо!
bool b3 = true ; // Без проблем.
bool b4 = false ; // Без проблем.
Console.WriteLine("-› bool.FalseString: {0}", bool .FalseString);
Console.WriteLine("-› bool.TrueString: {0}", bool .TrueString);
Текстовые данные в C# представляются встроенными типами данных string и char. Все .NET-языки отображают текстовые типы в соответствующие базовые типы (System.String и System.Char). Оба эти типа в своей основе используют Unicode.
Тип System.Char обеспечивает широкие функциональные возможности, далеко выходящие за рамки простого хранения символьных данных (которые, кстати, должны помещаться в одиночные кавычки). Используя статические методы System.Char, вы можете определить, является ли данный символ цифрой, буквой, знаком пунктуации или чем-то иным. Для иллюстрации рассмотрим следующий фрагмент программного кода.
static void Main(string[] args) {
…
// Проверьте работу следующих операторов…
Console.WriteLine("-› char.IsDigit('К'): {0}", char. IsDigit('К'));
Console.WriteLine("-› char.IsDigit('9'): {0}", char. IsDigit('9'));
Console.WriteLine("-› char.IsLetter('10', 1): {0}", char. IsLetter("10", 1));
Console.WriteLine("-› char.IsLetter('p'): {0}", char. IsLetter('p'));
Console.WriteLine("-› char.IsWhiteSpace('Эй, там!', 3): {0}", char. IsWhiteSpace("Эй, там!", 3));
Console.WriteLine("-› char.IsWhiteSpace('Эй, там!', 4): {0}", char. IsWhiteSpace("Эй, там!", 4));
Console.WriteLine("-› char.IsLettetOrDigit('?'): {0}", char. IsLetterOrDigit('?'));
Console.WriteLine("-› char.IsPunctuation('!'): {0}", char. IsPunctuation('!'));
Console.WriteLine("-›char.IsPunctuation('›'): {0}", char .IsPunctuation('›'));
Console.WriteLine("-› char.IsPunctuation(','): {0}", char. IsPunctuation(','));
…
}
Как видите, для всех этих статических членов System.Char при вызове используется следующее соглашение: следует указать либо единственный символ, либо строку с числовым индексом, который указывает местоположение проверяемого символа.
Читать дальше