Как работает C # generic? - PullRequest
       56

Как работает C # generic?

0 голосов
/ 04 марта 2019

C ++ шаблоны генерируются во время компиляции.Я слышал, что генерики C # генерируются во время выполнения.Это значит, что он генерируется в момент выполнения IL ->?Эта часть также включена в среду выполнения?

1 Ответ

0 голосов
/ 04 марта 2019

Ваши утверждения верны, шаблоны C ++ полностью созданы при компиляции, .Net создает необходимые типы во время выполнения.Хотя универсальная типизация должна быть разрешена во время компиляции, сгенерированные классы для MSIL , которые используются и используются повторно, генерируются во время выполнения (хотя и немного иначе для типов значений и ссылочных типов)

Различия между шаблонами C ++ и шаблонами C # (Руководство по программированию в C #)

Шаблоны C # Generics и C ++ - это языковые функции, обеспечивающие поддержку параметризованных типов.Тем не менее, есть много различий между ними.На уровне синтаксиса универсальные шаблоны C # представляют собой более простой подход к параметризованным типам без сложности шаблонов C ++.Кроме того, C # не пытается предоставить все функциональные возможности, которые предоставляют шаблоны C ++. На уровне реализации основное отличие состоит в том, что замены универсального типа в C # выполняются во время выполнения, и информация об универсальном типе, таким образом, сохраняется для экземпляров объектов .

Обобщения вВремя выполнения (Руководство по программированию в C #)

Типы значений

Когда универсальный тип впервые создается с типом значенияв качестве параметра среда выполнения создает специализированный универсальный тип с предоставленным параметром или параметрами, замененными в соответствующих местах в MSIL.Специализированные универсальные типы создаются один раз для каждого уникального типа значения, используемого в качестве параметра.

Типы ссылок

Обобщения работают несколько по-разному дляссылочные типы. При первом создании универсального типа с любым ссылочным типом , среда выполнения создает специализированный универсальный тип со ссылками на объекты, заменяемыми параметрами в MSIL .Затем каждый раз, когда создается экземпляр составного типа со ссылочным типом в качестве параметра, независимо от того, какой это тип, среда выполнения повторно использует ранее созданную специализированную версию универсального типа.Это возможно, потому что все ссылки имеют одинаковый размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...