C Sharp/Переменные: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 66:
 
C# предоставляет стандартный набор встроенных числовых типов для представления целых чисел, значений с плавающей запятой, логических выражений, текстовых символов, десятичных значений и других типов данных. Существуют также встроенные типы string и object. Они доступны для использования в любой программе C#. Дополнительные сведения о встроенных типах см. в разделе Справочные таблицы по типам (Справочник по C#).
== Пользовательские типы ==
 
________________________________________
Конструкции структура, класс, интерфейс и перечисление используются для создания собственных пользовательских типов. Сама библиотека классов платформы .NET Framework является коллекцией пользовательских типов, предоставленной корпорацией Microsoft, которую можно использовать в собственных приложениях. По умолчанию наиболее часто используемые типы в библиотеке классов доступны в любой программе C#. Другие становятся доступными только при явном добавлении ссылки проекта на сборку, в которой они определены. Если компилятор имеет ссылку на сборку, то можно объявить переменные (и константы) типов, объявленных в сборке в исходном коде. Дополнительные сведения см. в разделе Библиотека классов .NET Framework.
 
== Система общих типов CTS ==
________________________________________
 
Важно понимать две фундаментальные точки о системе типов в .NET Framework:
* Она поддерживает принцип наследования. Типы могут быть производными от других типов, которые называются базовыми типами. Производный тип наследует (с некоторыми ограничениями) методы, свойства и другие члены базового типа. Базовый тип, в свою очередь, может быть производным от какого-то другого типа, при этом производный тип наследует члены обоих базовых типов в иерархии наследования. Все типы, включая встроенные числовые типы, например, System.Int32 (ключевое слово C#: int), в конечном счете являются производными от одного базового типа, который является System.Object (ключевое слово C#: объектом). Эта унифицированная иерархия типов называется Система общих типов CTS (CTS). Дополнительные сведения о наследовании в C# см. в разделе Наследование (Руководство по программированию на C#).
* Каждый тип в CTS определен либо как тип значения, либо как ссылочный тип. Сюда включены все пользовательские типы в библиотеке классов платформы .NET Framework, а также собственные пользовательские типы. Типы, определяемые с помощью ключевого слова struct, являются типами значений; все встроенные числовые типы являются structs. Типы, определяемые с помощью ключевого слова class, являются ссылочными типами. Правила времени компиляции и поведение времени выполнения ссылочных типов отличается от правил времени компиляции и поведения времени выполнения типов значений.
В следующем примере показана связь между типами значений и ссылочными типами в CTS.
Типы значений и ссылочные типы в CTS
 
;Примечание
:Можно увидеть, что наиболее часто используемые типы все организованы в пространстве имен System. Однако пространство имен, в котором содержится тип, не имеет отношения к тому, является ли этот тип типом значения или ссылочным типом.
 
== Типы значений ==
Примечание
 
Можно увидеть, что наиболее часто используемые типы все организованы в пространстве имен System. Однако пространство имен, в котором содержится тип, не имеет отношения к тому, является ли этот тип типом значения или ссылочным типом.
Типы значений
Типы значений являются производными от System.ValueType, являющегося производным от System.Object. Типы, производные от System.ValueType, имеют особое поведение в среде CLR. Переменные типа значения напрямую содержат их значения, что означает, что память встроена в контекст, в котором объявлена переменная. Не существует отдельного размещения кучи или служебных данных сборки мусора для переменных типа значения.
Существует две категории типов значений: структура и перечисление.
Встроенные числовые типы являются структурами, и к их свойствам и методам можно получить доступ.
 
<source lang="csharp">
// Static method on type Byte.
byte b = Byte.MaxValue;
</source>
 
Но значения объявляются и присваиваются им, как если бы они были простыми не статическими типами:
<source lang="csharp">
byte num = 0xA;
int i = 5;
char c = 'Z';
</source>
 
Типы значений являются запечатанными, что означает, например, что нельзя произвести тип от System.Int32, и нельзя определить структуру для наследования от любого пользовательского класса или структуры, поскольку структура может наследовать только от System.ValueType. Однако структура может реализовать один или несколько интерфейсов. Можно выполнить приведение типа структуры в тип интерфейса; это приведет к операции упаковки-преобразования для создания программы-оболочки структуры внутри объекта ссылочного типа в управляемой куче. Операции упаковки-преобразования возникают при передаче типа значения методу, принимающему System.Object в качестве входного параметра. Дополнительные сведения см. в разделе Упаковка-преобразование и распаковка-преобразование (Руководство по программированию на C#).
Ключевое слово struct используется для создания собственных пользовательских типов значений. Обычно структура используется как контейнер для небольшого набора связанных переменных, как показано в следующем примере:
<source lang="csharp">
public enum FileMode
{
Строка 106 ⟶ 109 :
Append = 6,
}
</source>
 
Значение константы System.IO.FileMode.Create равно 2. Однако имя намного более значимо для пользователей, читающих исходный код, и по этой причине лучше использовать перечисления вместо литеральных номеров констант. Дополнительные сведения см. в разделе System.IO.FileMode.