我正在阅读this关于 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 中,一切都会正常运行。无需反射(reflection)!
这在 C# 中可能吗?
换句话说,我可以指示 C# 编译器对一堆类(比方说,在库中)进行类型检查,但将它们排除在编译之外吗?
最佳答案
我不是 100% 清楚 as3 代码在做什么 - 但听起来你想定义一个外部程序集可以实现的通用接口(interface)(在单独的 dll 中) - 并在创建时简单地转换它对象:
Type type = loadedAssembly.GetType(fullyQualifiedName);
IMyInterface obj = (IMyInterface)Activator.CreateInstance(type):
现在您可以轻松使用 obj
上定义的方法。
或者,在 C# 4.0 中,dynamic
关键字提供鸭子类型。
关于C# 程序集加载和后期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1081842/