Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#组件加载和后期绑定_C#_Actionscript 3_Assemblies_Late Binding_Applicationdomain - Fatal编程技术网

C#组件加载和后期绑定

C#组件加载和后期绑定,c#,actionscript-3,assemblies,late-binding,applicationdomain,C#,Actionscript 3,Assemblies,Late Binding,Applicationdomain,我正在读一本关于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

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

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

Type type = loadedAssembly.GetType(fullyQualifiedName);
IMyInterface obj = (IMyInterface)Activator.CreateInstance(type):
现在,您可以轻松地使用在
obj
上定义的方法

或者,在C#4.0中,
dynamic
关键字提供duck类型

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

C#是一种静态类型语言,它在编译时执行所有类型检查。类型检查不是“额外奖励”,它是一个完整的功能。C#始终能够使用反射进行后期绑定,并且随着即将推出的新dynamic关键字的出现,该功能变得越来越好


但是,如果您使用C#所具有的任何后期绑定特性,就不会得到类型检查

注意:dynamic关键字比公共界面灵活一点,如果您在公共界面上更改版本,您需要重新编译扩展和主应用,或者您需要处理重定向解析程序的问题。这是您处理插件接口的方式吗?这确实是插件API最常用的选项之一。@Subb,请参阅MEF以了解Microsoft推荐的插件处理方式。@Sam-目前只是预览。将来它可能是决定性的[等等]。嗯。那很有趣。在我看来,AS3是一种静态类型的语言,具有一些动态特性。我不知道为什么我会这样想,因为它基于ECMAScript,一种动态语言。我想编译器在隐藏它方面做得非常好。这实际上解释了很多事情。。。