хостинг CLR

Платформа .NET Framework работает поверх Microsoft Windows. Это значит, что в ее основе должны лежать технологии, с которыми Windows может взаимодействовать. Для начала все файлы управляемых модулей и сборок должны иметь формат PE (portable executable), являться исполняемыми файлами Windows (EXE) или динамически подключаемыми библиотеками (DLL).

В Microsoft разработали CLR в виде COM-сервера, содержащегося в DLL. То есть разработчики определили для CLR стандартный COM-интерфейс и присвоили этому интерфейсу и COM-серверу глобально уникальные идентификаторы (GUID). При установке .NET Framework COM-сервер, представляющий CLR, регистрируется в реестре Windows как любой другой COM-сервер. Подробнее см. заголовочный файл C++ MetaHost.h из .NET Framework SDK — в этом файле определены все GUID-идентификаторы и неуправляемый интерфейс ICLRMetaHost. Читать полностью

Хостинг CLR и домены приложений

Хостинг и домены приложений

Далее, в следующих статьях обсуждаются две темы, позволяющие по-настоящему оценить достоинства Microsoft .NET Framework, — хостинг (hosting) и домены приложений (AppDomains). Читать полностью

Проблемы верификации

Сравнение переменной обобщенного типа с null
Сравнение переменной обобщенного типа с null с помощью операторов == и != допустимо независимо от того, ограничен обобщенный тип или нет:

1
2
3
4
5
private static void ComparingAGenericTypeVariableWithNull<t>(T obj) 
{
  if (obj == null)
    { /* Этот код никогда не исполняется для значимого типа */ }
}</t>
private static void ComparingAGenericTypeVariableWithNull<t>(T obj) 
{
  if (obj == null)
    { /* Этот код никогда не исполняется для значимого типа */ }
}</t>

Читать полностью

Другие проблемы верификации

Здесь я представлю несколько конструкций, которые из-за проблем с верификацией при использовании обобщений ведут себя непредсказуемо, и покажу, как с помощью ограничений сделать их верифицируемыми. Читать полностью

Ограничения конструктора

Для параметра-типа можно задать не более одного ограничения конструктора. Ограничение конструктора гарантирует компилятору, что указанный аргумент-тип будет иметь неабстрактный тип, имеющий открытый конструктор без параметров. Учтите, что компилятор С# считает ошибкой одновременное задание ограничения конструктора и ограничения struct, потому что это избыточно. У всех значимых типов неявно присутствует открытый конструктор без параметров. В следующем классе для параметра-типа использовано ограничение конструктора: Читать полностью

Дополнительные ограничения

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

Основные ограничения

В параметре-типе можно задать не более одного основного ограничения. Основным ограничением может быть ссылочный тип, указывающий на незапечатанный класс. Нельзя использовать для этой цели следующие ссылочные типы: System.Object, System.Array, System.Delegate, System.MulticastDelegate, System.ValueType, System.Enum и System.Void.

При задании ограничения ссылочного типа вы гарантируете компилятору, что заданный аргумент-тип будет относиться либо к типу, указанному в ограничении, либо к производному от него типу. Для примера возьмем следующий обобщенный класс: Читать полностью

Наверх