Загрузка сборки 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
ключевое слово обеспечивает типизацию утки.