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

Содержимое удалено Содержимое добавлено
Строка 73:
 
Важно понимать две фундаментальные точки о системе типов в .NET Framework:
* Она поддерживает принцип наследования. Типы могут быть производными от других типов, которые называются базовыми типами. Производный тип наследует (с некоторыми ограничениями) методы, свойства и другие члены базового типа. Базовый тип, в свою очередь, может быть производным от какого-то другого типа, при этом производный тип наследует члены обоих базовых типов в иерархии наследования. Все типы, включая встроенные числовые типы, например, System.Int32 (ключевое слово C#: int), в конечном счете являются производными от одного базового типа, которыйкоторым является System.Object (ключевое слово C#: объектомobject). Эта унифицированная иерархия типов называется Система общих типов CTS (CTS). Дополнительные сведения о наследовании в C# см. в разделе Наследование (Руководство по программированию на C#).
* Каждый тип в CTS определен либо как тип значения, либо как ссылочный тип. Сюда включены все пользовательские типы в библиотеке классов платформы .NET Framework, а также собственные пользовательские типы. Типы, определяемые с помощью ключевого слова struct, являются типами значений; все встроенные числовые типы являются structs. Типы, определяемые с помощью ключевого слова class, являются ссылочными типами. Правила времени компиляции и поведение времени выполнения ссылочных типов отличается от правил времени компиляции и поведения времени выполнения типов значений.
В следующем примере показана связь между типами значений и ссылочными типами в CTS.
Строка 79:
 
;Примечание
:Можно увидеть, что все наиболее часто используемые типы все организованы в пространстве имен System. Однако пространство имен, в котором содержится тип, не имеет отношения к тому, является ли этот тип типом значения или ссылочным типом.
 
== Типы значений ==
Типы значений являются производными от System.ValueType, являющегося производным от System.Object. Типы, производные от System.ValueType, имеют особое поведение в среде CLR. Переменные типа значения напрямую содержат их значения, что означает, что память встроена в контекст, в котором объявлена переменная. Не существует отдельного размещения кучи или служебных данных сборки мусора для переменных типа значения.