Еще одним важным видом систем типизации языков программирования является полиморфная типизация. При таком подходе допустимы выражения переменного типа (скажем, функция упорядочения списка с заранее неопределенным типом элементов).
Процедура контроля соответствия типов (type-checking) может быть реализована как во время компиляции (compile time), т.е. более безопасным образом, так и во время выполнения (run time) программы, что потенциально менее безопасно для программного кода.
Исследуем особенности управления типами в системе типизации Common Type System технологии Microsoft .NET.
Из соображений безопасности программного кода Microsoft .NET типы Common Type System, так же, как объекты и классы, могут использоваться только после инициализации. При этом необходимо учитывать особенности вызывающего метода, а также методов доступа get и изменения set.
Подобно конкретизации значений типов при определении значения типовой переменной, над элементами типов могут осуществляться преобразования из одного типа данных в другой (например, из строки в число или наоборот). При этом такие преобразования могут инициироваться как программистом (т.е. происходить явно), так и системой программирования (т.е. происходить неявным образом).
Иерархия типов в соотнесении с Microsoft .NET может быть представлена в форме той или иной совокупности (в частности, в виде пространства имен, файла или сборки).
Как уже отмечалось, наиболее крупными и важными подкатегориями иерархической системы типизации в Microsoft .NET являются ссылочные типы (reference type) и типы-значения (value type).
Рассмотрим более подробно особенности реализации ссылочных типов и типов-значений в языке программирования C#.
Прежде всего, типы-значения, в отличие от ссылочных типов, содержат непосредственно объекты данных. Кроме того, типы-значения не могут быть пустыми (т.е. принимать значение null).
Ссылочные типы, в противоположность типам-значениям, содержат не сами объекты, а лишь ссылки на них, и могут принимать значение null.
В качестве иллюстрации особенностей реализации ссылочных типов и типов-значений в языке программирования C# рассмотрим следующий фрагмент программы на языке C#:
int i = 25; string s = "John_Smith";
В первой строке программы происходит означивание целочисленной константы (т.е. типа-значения), а во второй - строковой (т.е. типа-ссылки). В результате при выполнении первой строки программы происходит связывание со значением в памяти, а во втором - со ссылкой, т.е. указателем на область памяти.