【问题标题】:Need help defining an Interface in C#需要帮助在 C# 中定义接口
【发布时间】:2009-08-01 22:49:56
【问题描述】:

我有一个数据驱动的地图应用程序,我需要在其中将自定义函数实现为插件。我需要执行的自定义方法的名称也将在映射数据中。我知道我可以使用 invoke 命令调用该方法;但是,如何确保每个方法都有适当的签名?

【问题讨论】:

  • 你能举个例子吗?

标签: c# interface late-binding


【解决方案1】:

首先,我认为您不应该允许为被覆盖的方法使用任意名称 - 只需定义一个接口并保持简单即可。

您可以使用一个方法定义一个接口,该方法返回一个委托给执行该工作的方法。

否则,您只需要使用反射来获取映射方法的 MethodInfo 并在运行时检查它是否具有正确的签名。

【讨论】:

  • 名称不是任意的。内部开发人员将创建自定义函数并将名称放入数据库中,以便我们的用户将它们应用于特定地图。当我的服务应用地图时,它需要调用自定义函数来完成任务。我试图避免每次需要新的自定义函数时重新编译应用程序。坦率地说,反射/接口/委托比我习惯的要复杂一些。所以在此期间,我很可能会使用早期绑定。但我需要知道如何以更可扩展的方式做到这一点。
  • 接口一点都不复杂,任何一本C#初学者的书都会教你如何使用。
  • “自定义函数”——它们是 SQL、C# 还是什么?你的服务是 C# 吗?
  • 是的,功能是 C#,服务是 C#。
【解决方案2】:

通常,在开发插件架构时,您会定义一个接口,其中包含您将在插件上调用的方法。该插件是实现接口所必需的。当你加载它时,你将它转换为接口(如果它没有实现它,这将失败)并在你的代码中使用它作为接口。如果插件的行为更通用,您只需更通用地定义接口,例如使用配置来建立插件的参数,然后使用不带参数的简单方法来调用插件的功能。我认为您会发现使用预定义的界面会更容易,而且它不应限制您太多。

【讨论】:

    【解决方案3】:

    你必须使用反射。

    您首先必须调用GetMethod() 方法才能获取相关方法的MethodInfo 对象。

    然后您需要使用.GetParameters() 方法来获取该方法的参数,然后您需要将这些参数与您期望该方法具有的参数进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多