加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

动态组织和调用C#方法

发布时间:2020-12-15 22:10:17 所属栏目:百科 来源:网络整理
导读:相对较新的C#,寻找执行以下操作的“最佳实践”方式: 我有一个类(传感器)与公共方法,如“CommunicationStart”,“DoThing1”,“DoThing2”. 在调用这些方法之前,该类配置了传感器“Model” 基于该模型,公共方法应采用不同的代码路径.如果我要静态地执行此操
相对较新的C#,寻找执行以下操作的“最佳实践”方式:

我有一个类(传感器)与公共方法,如“CommunicationStart”,“DoThing1”,“DoThing2”.

在调用这些方法之前,该类配置了传感器“Model”

基于该模型,公共方法应采用不同的代码路径.如果我要静态地执行此操作,则在每个公共方法中切换模型都可以解决问题.

我想动态地这样做以帮助长期支持.在每个公共方法中包装动态加载代码的“正确”方法是什么?反射?代表们?动态加载的函数应该驻留在哪里?他们应该和他们的公共包装人员在同一个班级,还是住在新的班级?

我正在寻找更多的“正确”方法和组织,而不是语法,因为我可以自己解决这个问题.非常感谢!

解决方法

我希望我能正确理解你的问题.
以下是为常见方法和传感器实现创建可扩展系统的方法:

用于处理公共代码(传感器公共方法需要):

如果动态加载程序集,则可以使用Reflection查找实现公共接口的所有类,例如ISensorMethod(在通用程序集中).所有组件都必须知道它.
这个接口可以有一个方法,比方说execute(),以及一个能够识别方法的标识符,例如string Key {get; }.
每个可重用的代码都是在一个单独的类中(每个方法一个类).

您的主代码(加载程序集的代码)可以在内部保留List< ISensorMethod>引用所有加载的可重用方法.

对于“传感器”类:

您可以执行相同的系统:动态加载程序集,找出所有“传感器”或“ISensor”类.
公共继承的传感器方法可以通过其Key调用可重用的方法.
为此,您可以在每个Sensor类中注入依赖项(在构造函数内或使用属性),比如IMethodCaller,允许它们通过键调用方法.

public interface IMethodCaller
{
   void CallMethodByKey(string key);
}

然后这是一种使用的可能性:

public class ElectricSensor : Sensor
{
   public ElectricSensor(IMethodCaller caller): base(caller)
   {
   }

   public void CommunicationStart()
   {
      base.Caller.CallMethodByKey("START_COMMON");
      base.Caller.CallMethodByKey("INITIALIZE_ELECTRIC");
   }

  // (...) 
}

可以使用工厂设计模式完成正确传感器类的实例化…
根据您的需要,有很多种可能性.
我建议尽可能少地使用Reflection,因为如果发生错误,它总是处于一个非常棘手的代码中,并且问题的根源通常很远……除非所有异常和错误都使用有意义的错误消息进行非常谨慎的处理(明确开发人员在几秒钟内找到问题的真正来源).

最好的祝福,

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读