Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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#_Java_.net_Plugins_Reflection - Fatal编程技术网

C# 在设计插件时,反射如何提供帮助?

C# 在设计插件时,反射如何提供帮助?,c#,java,.net,plugins,reflection,C#,Java,.net,Plugins,Reflection,我已经读到,在处理插件时,反射特别有用。有人能强调一下这种特殊情况下的好处吗?无论是在C#还是Java中。在我看来,插件实现不需要依赖反射。我建议使用常用的接口和服务。为插件定义一些要实现的接口,并让它们使用有助于它们与您想要提供的框架集成的服务。“在最高抽象级别,主机应用程序必须能够加载插件,然后与插件通信,以利用其设计的服务。根据开发人员对语言和平台的选择,这两个任务可以以不同的方式实现。如果选择C#和.NET,则可以使用反射加载插件,并且可以使用接口或抽象类作为通用通信的手段。” 如果你用

我已经读到,在处理插件时,反射特别有用。有人能强调一下这种特殊情况下的好处吗?无论是在C#还是Java中。

在我看来,插件实现不需要依赖反射。我建议使用常用的接口和服务。为插件定义一些要实现的接口,并让它们使用有助于它们与您想要提供的框架集成的服务。

“在最高抽象级别,主机应用程序必须能够加载插件,然后与插件通信,以利用其设计的服务。根据开发人员对语言和平台的选择,这两个任务可以以不同的方式实现。如果选择C#和.NET,则可以使用反射加载插件,并且可以使用接口或抽象类作为通用通信的手段。”


如果你用谷歌搜索其中一些内容,你可以看到这篇文章并阅读更多相关内容。

为什么不直接用谷歌搜索呢


对于.NET,您可以使用一个接口来创建插件的基本布局。我们称之为“IPlugIn”。然后加载一个带有实现IPlugIn的类的程序集。现在,您可以查看所有类型(如果一个是由IPlugIn派生的),或者在程序集上定义属性以指示哪个类是插件。

您如何发现这些类如何实现适当的接口?我同意@Daniel Kelley的观点,有一个发现和第一个调用问题。当然,这取决于情况,但如果他的场景足够简单,他可以从他的项目中引用其他程序集。他没有提供足够的信息来推测复杂性…插件的定义最初是未知的源代码,而它可能是从已知的东西派生出来的,或者包含一些已知接口的实现。当然,插件中的某种清单可以给出可以加载的类的名称,并以某种方式注册。但是类只能通过名称(作为字符串)实例化使用反射。一旦类被实例化,就可以通过某个商定的接口与它进行进一步的对话。Java不允许列出jar中的所有类,检查可能需要的接口的一些实现。至少这里说反射可以用于加载插件,接口可以用于与Java也是如此。这个答案使用了一些非常明智和复杂的语言。