gpt4 book ai didi

c# - 接口(interface)可以定义 c#-constructor 的签名吗

转载 作者:可可西里 更新时间:2023-11-01 08:57:19 25 4
gpt4 key购买 nike

我有一个 .net-app,它提供了一种使用插件扩展应用程序的机制。每个插件都必须实现一个插件接口(interface),并且还必须提供一个接收一个参数(资源上下文)的构造函数。

在插件类的实例化过程中,我通过反射查看是否存在所需的构造函数,如果存在,我将实例化该类(通过反射)。如果构造函数不存在,我会抛出一个异常,提示无法创建插件,因为所需的构造函数不可用。

我的问题是,是否有一种方法可以在插件接口(interface)中声明构造函数的签名,以便实现插件接口(interface)的每个人也必须提供具有所需签名的构造函数。这将简化插件的创建。

我不认为存在这种可能性,因为我认为这样的功能不属于设计界面的主要目的,但也许有人知道这样做的声明,例如:

public interface IPlugin {
ctor(IResourceContext resourceContext);
int AnotherPluginFunction();
}

我想补充一点,我不想将构造函数更改为无参数,然后通过属性设置资源上下文,因为这会使插件的创建变得更加复杂。编写插件的人不是具有深厚编程经验的人。这些插件用于计算应用可视化的统计数据。


谢谢大家的回答。

我决定,我让它成为一个接口(interface),因为我不想强制插件程序员从抽象类继承,这样他或她就失去了从自己的基类继承的可能性。此外,从抽象类派生并不能确保插件程序员真正提供所需的构造函数。这只会增加它的可能性(程序员仍然有可能只添加一个包含所需参数但也有其他参数的构造函数,这也很糟糕。请参阅对 Ken Browning 的回答的评论)。

虽然我在帖子中提到我不想要这样的属性(property),但我将 Danny Varod 的回答标记为已接受,因为我认为在我的情况下这是最合适的解决方案。感谢所有回答的人。

最佳答案

插件的可扩展性是我的最爱...

我所做的是确保插件实现接口(interface)或继承适当“插件套接字”的基类。

有些地方基类更合适(如果插件是X类的),
在某些接口(interface)中更合适(如果插件做 IX)。

我没有将上下文传递给构造函数,而是为此使用了一个属性和一个无参数的公共(public)构造函数。

这还可以使用反射更轻松地反序列化插件。

关于c# - 接口(interface)可以定义 c#-constructor 的签名吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com