2

我正在阅读本关于 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# 编译器对一堆类(比如说,在库中)进行类型检查,但将它们排除在编译之外吗?

4

2 回答 2

2

我不是 100% 清楚 as3 代码在做什么——但听起来你想定义一个外部程序集可以实现的通用接口(在单独的 dll 中)——并在创建对象时简单地转换它:

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

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

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

于 2009-07-04T09:15:01.133 回答
1

我刚读到这个

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

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

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

于 2009-07-04T09:44:30.777 回答