Загрузка сборки C# и позднее связывание

Я читаю эту книгу на C# и.NET и изучаю кучу интересных вещей. Я прочитал ту часть, где автор говорит о динамической загрузке сборки и создании экземпляра типа в этой сборке.

В AS3 можно делать такие же вещи, за исключением одного: вы можете попросить компилятор не компилировать набор классов, но проверить безопасность типов. Вот пример:

//Defined in an external library
public class A {...}


//In my application, I tell the compiler to type check A, but not compile it
var a:A = new A();
a.whatever();

Во время выполнения в моем коде приложения я могу динамически загрузить свою внешнюю библиотеку, содержащую определение класса A, загрузить эти определения в ApplicationDomain моего приложения, и все будет работать нормально. Нет необходимости размышлять!

Возможно ли это в C#?

Другими словами, могу ли я дать указание компилятору C# выполнить проверку типов для группы классов (скажем, в библиотеке), но исключить их из компиляции?

2 ответа

Решение

Я только что прочитал это

Action Script - это динамический язык, он предлагает в качестве "специального бонуса" функцию проверки типов, он помогает вам обнаруживать ошибки во время компиляции, как это делают языки со статической типизацией.

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

Однако, если вы используете какие-либо функции позднего связывания, которые есть в C#, вы не получите проверку типов.

Я не на 100% уверен в том, что делает код as3 - но похоже, что вы хотите определить общий интерфейс (в отдельной dll), который может реализовать ваша внешняя сборка, - и просто приведете его при создании объекта:

Type type = loadedAssembly.GetType(fullyQualifiedName);
IMyInterface obj = (IMyInterface)Activator.CreateInstance(type):

Теперь вы можете использовать методы, определенные на obj без труда.

Кроме того, в C# 4.0 dynamic ключевое слово обеспечивает типизацию утки.

Другие вопросы по тегам