stringtranslate.com

Система общих типов

В .NET Framework компании Microsoft система общих типов ( CTS ) — это стандарт, который определяет, как определения типов и конкретные значения типов представлены в памяти компьютера. Он предназначен для того, чтобы программы, написанные на разных языках программирования, могли легко обмениваться информацией. При использовании в языках программирования тип можно описать как определение набора значений (например, «все целые числа от 0 до 10») и допустимых операций над этими значениями (например, сложение и вычитание).

Спецификация CTS содержится в стандарте Ecma 335, «Common Language Infrastructure (CLI) Partitions I to VI». CLI и CTS были созданы корпорацией Microsoft, а фреймворк Microsoft .NET является реализацией стандарта.

Функции системы общих типов

При округлении дробных значений по умолчанию во всей Framework используется метод « полу-к-четному » («банковский»). Начиная с версии 2, по желанию программиста также доступно «симметричное арифметическое округление» (округление до половины от нуля). [1]

Тип категории

Общая система типов поддерживает две общие категории типов:

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

Следующий пример, написанный на Visual Basic .NET, демонстрирует разницу между ссылочными типами и типами значений:

Система импорта Class Class1 Public Value As Integer = 0 End Class 'Class1 Class Test Shared Sub Main () Dim val1 As Integer = 0 Dim val2 As Integer = val1 val2 = 123 Dim ref1 As New Class1 () Dim ref2 As Class1 = ref1 ref2 . Value = 123 Console . WriteLine ( "Значения: {0}, {1}" , val1 , val2 ) Console . WriteLine ( "Ссылки: {0}, {1}" , ref1 . Value , ref2 . Value ) End Sub 'Main End Class 'Test                                                      

Вывод приведенного выше примера

Значения: 0, 123Ссылки: 123, 123

Упаковка и распаковка

Бокс

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

Int32 x = 10 ; object o = x ; // Неявная упаковка Console . WriteLine ( "Объект o = {0}" , o ); // выводит "Объект o = 10"          

Однако Int32 всегда можно явно упаковать следующим образом:

Int32 x = 10 ; object o = ( object ) x ; // Явная упаковка Console . WriteLine ( "Объект o = {0}" , o ); // выводит "Объект o = 10"          

Распаковка

Следующий пример показывает, как распаковать ссылочный тип обратно в тип значения. Сначала Int32 упаковывается в объект, а затем снова распаковывается. Обратите внимание, что распаковка требует явного приведения.

Int32 x = 5 ; object o1 = x ; // Неявная упаковка x = ( int ) o1 ; // Явная распаковка           

Смотрите также

Ссылки

  1. ^ «Перечисление округления средней точки». Microsoft Docs .

Внешние ссылки