Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

4.1.2Конструкторы по умолчанию

Во всех типах значений неявно объявляется не содержащий параметров открытый конструктор экземпляров, называемый конструктором по умолчанию. Конструктор по умолчанию возвращает заполненный нулями экземпляр типа значений, называемый значением по умолчанию.

  • Для всех простых_типов значение по умолчанию представляет собой битовый шаблон, заполненный нулями:

  • Для типов sbyte, byte, short, ushort, int, uint, long и ulong значение по умолчанию составляет 0.

  • Для типа char значение по умолчанию составляет «\x0000».

  • Для типа float значение по умолчанию составляет 0.0f.

  • Для типа double значение по умолчанию составляет 0.0d.

  • Для типа decimal значение по умолчанию составляет 0.0m.

  • Для типа bool значение по умолчанию составляет false.

  • Для перечисляемого_типа E значение по умолчанию составляет 0 и преобразуется к типу E.

  • Для типа_структуры значение по умолчанию формируется путем присвоения значений по умолчанию всем полям, имеющим тип значений, а всем полям ссылочного типа — значения null.

  • Для обнуляемого_типа значение по умолчанию представляет собой экземпляр, свойство HasValue которого имеет значение «false», а свойство Value не определено. Для обнуляемых типов значение по умолчанию также называется пустым значением.

Как и любой другой конструктор экземпляров, конструктор по умолчанию для типа значений вызывается с помощью оператора new. В целях повышения эффективности в реализации не обязательно создается вызов конструктора. В приведенном ниже примере выполняется инициализация переменных i и j нулевыми значениями.

class A { void F() { int i = 0; int j = new int(); } }

Поскольку для каждого типа значений неявно определяется не содержащий параметров открытый конструктор экземпляров, в типе структуры не допускается явное объявление не содержащего параметров конструктора. Тем не менее, в типе структуры допускается объявление параметризованных конструкторов экземпляров (§11.3.8).

4.1.3Типы структуры

Тип структуры представляет собой тип значений, в котором допускается объявление констант, полей, методов, свойств, индексаторов, операторов, конструкторов экземпляров, статических конструкторов и вложенных типов. Дополнительные сведения об объявлении типов структуры см. в разделе §11.1.

4.1.4Простые типы

В C# представлен набор предопределенных типов структуры, называемых простыми типами. Простые типы обозначаются зарезервированными словами. Эти слова представляют собой псевдонимы предопределенных типов структуры в пространстве имен System (см. таблицу ниже).

Зарезервированное слово

Тип с псевдонимом

sbyte

System.SByte

byte

System.Byte

short

System.Int16

ushort

System.UInt16

int

System.Int32

uint

System.UInt32

long

System.Int64

ulong

System.UInt64

char

System.Char

float

System.Single

double

System.Double

bool

System.Boolean

decimal

System.Decimal

Поскольку простой тип представляет собой псевдоним типа структуры, каждый простой тип содержит члены. Например, int содержит члены, объявленные в System.Int32, а также члены, унаследованные от System.Object. При этом допускаются операторы следующего вида:

int i = int.MaxValue; // System.Int32.MaxValue constant string s = i.ToString(); // System.Int32.ToString() instance method string t = 123.ToString(); // System.Int32.ToString() instance method

Различие между простыми типами и типами структуры заключается в том, что в простых типах допускаются некоторые дополнительные операции:

  • Для большинства простых типов допускается создание значений путем записи литералов (§2.4.4). Например, 123 представляет собой литерал типа int, а 'a' — литерал типа char. В C# не предусматривается использование литералов для типов структуры. Создание значений не по умолчанию для других типов структуры практически во всех случаях осуществляется с использованием конструкторов экземпляров соответствующих типов.

  • Значение выражения, все операнды которого являются константами простого типа, может быть вычислено на этапе компиляции. Такие выражения называются константными_выражениями (§7.19). Выражения, которые содержат операторы, определяемые другими типами структуры, не являются константными.

  • Для объявления констант простых типов используется объявление const (§10.4). Константы других типов структуры не поддерживаются, однако аналогичное действие имеют поля static readonly.

  • При вычислении операторов преобразования, определенных другими типами структуры, могут использоваться преобразования простых типов. Однако пользовательские операторы преобразования никогда не используются при вычислении другого пользовательского оператора (§6.4.3).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]