Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Троелсен Э. Язык программирования С# 2010 и п...docx
Скачиваний:
113
Добавлен:
21.09.2019
Размер:
6.92 Mб
Скачать

Статические члены System.Object

В завершение нашего обсуждения базового класса .NET, находящегося на вершине иерархии классов, следует отметить, что System.Object определяет два статических члена (Object.Equals() и Object.ReferenceEquals()), обеспечивающих проверку на равенство значений и ссылок соответственно. Рассмотрим следующий программный код.

static void Main(string[] args) {

 // Два объекта с идентичной конфигурацией.

 Person р3 = new Person("Fred", "Jones", "222-22-2222", 98);

 Person p4 = new Person("Fred", "Jones", "222-22-2222", 98);

 // Одинаковы ли состояния р3 и р4? ИСТИНА!

 Console.WriteLine("Одинаковы ли состояния: р3 и р4: {0} ", object.Equals(р3, р4));

 // Являются ли они одним объектом в памяти? ЛОЖЬ!

 Console.WriteLine ("Указывают ли р3 и р4 на один объект: {0} ", object.ReferenceEquals(р3, р4));

}

Исходный код. Проект ObjectMethods размещен в подкаталоге, соответствующем главе 3.

Типы данных System (и их обозначения в c#)

Вы, наверное, уже догадались, что каждый внутренний тип данных C# – это на самом деле сокращенное обозначение некоторого типа, определенного в пространстве имен System. В табл. 3.11 предлагается список типов данных System, указаны их диапазоны изменения, соответствующие им псевдонимы C# и информация о согласованности типа со спецификациями CLS.

Таблица 3.11. Типы System и их обозначения в C#

Обозначение в C#

Согласованность с CLS

Тип System

Диапазон изменения

 Описание 

sbyte

Нет

System.SByte

от -128 до 127

8-битовое число со знаком

byte 

Да

System.Byte

От 0 до 255

8-битовое число без знака

short

Да

System.Int16

от -32768 до 32767

16-битовое число со знаком

ushort

Нет

System.UInt16

от 0 до 65535

16-битовое число без знака

int

Да

System.Int32

от -2147483648 до

2147483647

32-битовое число со знаком

Uint

Нет

System.UInt32

от 0 до 4294967295

32-битовое число без знака

long

Да

System.Int64

От -9223372036854775808 до

9223372036854775807

64-битовое число со знаком

ulong

Нет

System.UInt64

от 0 до 18446744073709551615

64-битовое число без знака

char

Да

System.Char

от U0000 до Uffff

Отдельный 16-битовый символ Unicode

float

Да

System.Single

от 1.5×10-45 до 3.4×1038

32-битовое число с плавающим десятичным разделителем

double

Да

System.Double

от 5.0х10-324 до 1.7х10308

64-битовое число с плавающим десятичным разделителем

bool

Да

System.Boolean

true или false

Представляет истину или ложь

decimal

Да

System.Decimal

от 100 до 1028

96-битовое число со знаком

string

Да

System.String

Ограничено системной памятью

Представляет набор символов Unicode

object

Да

System.Object

Любой тип можно сохранить в

объектной переменной

Базовый класс всех типов во вселенной .NET

Замечание. По умолчанию действительный числовой литерал справа от операции присваивания интерпретируется, как double. Поэтому, чтобы инициализировать переменную типа float, используйте суффикс f или F (например 5.3F).

Интересно отметить, что и примитивные типы данных .NET организованы в иерархии классов. Отношения между этими базовыми типами (как и некоторыми другими типами, с которыми мы познакомимся чуть позже) можно представить так, как показано на рис. 3.19.

Рис. 3.19. Иерархия типов System

Как видите, каждый из этих типов, в конечном счете, получается из System.Object. Ввиду того, что такие типы данных, как, например, int являются просто сокращенными обозначениями соответствующего системного типа (в данном случае типа System.Int32), следующий вариант синтаксиса оказывается вполне допустимым.

// Помните! В C# int - это просто сокращение для System. Int32.

Console.WriteLine(12.GetHashCode());

Console.WriteLine(12.Equals(23));

Console.WriteLine(12.ToString());

Console.WriteLine(12); // ToString() вызывается автоматически.

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;