C#装配加载和后期装订

时间:2009-07-04 09:06:14

标签: c# actionscript-3 assemblies late-binding applicationdomain

我正在阅读关于C#和.NET的this书,我正在学习一些很酷的东西。我已经阅读了作者谈论动态加载程序集并在该程序集中创建类型实例的部分。

在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 个答案:

答案 0 :(得分:2)

我不是100%清楚as3代码在做什么 - 但听起来你想要定义一个外部程序集可以实现的公共接口(在一个单独的dll中) - 并且只是在创建对象:

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

现在您可以轻松使用obj上定义的方法。

或者,在C#4.0中,dynamic关键字提供了鸭子输入。

答案 1 :(得分:1)

我只是read this

动作脚本是一种动态语言,它提供了一种“特殊奖励”类型检查功能,它可以帮助您在编译时捕获错误,就像静态类型语言一样。

C#是一种静态类型语言,它在编译时进行所有类型检查。类型检查不是“额外奖励”,它是一个不可或缺的功能。 C#总是能够使用反射进行后期绑定,并且使用新的即将推出的动态关键字功能会越来越好。

但是,如果您使用C#具有的任何后期绑定功能,则不会进行类型检查。