gpt4 book ai didi

c# - 动态组织和调用 C# 方法

转载 作者:行者123 更新时间:2023-11-30 12:44:43 25 4
gpt4 key购买 nike

C# 相对较新,正在寻找执行以下操作的“最佳实践”方式:

我有一个带有公共(public)方法的类(传感器),例如“CommunicationStart”、“DoThing1”、“DoThing2”。

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

基于模型,公共(public)方法应该采用不同的代码路径。如果我要静态地执行此操作,则在每个公共(public)方法中打开模型就可以达到目的。

我想动态地执行此操作以提供长期支持。在每个公共(public)方法中包装动态加载代码的“正确”方法是什么?反射?代表?动态加载的函数应该放在哪里?它们应该与其公共(public)包装器在同一个类中,还是位于一个新类中?

我正在寻找“正确”的方法和组织,而不是语法,因为我可以自己解决这些问题。提前致谢!

最佳答案

希望我已经正确理解了您的问题。以下是我将如何为常用方法和传感器实现创建一个可扩展系统:

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

如果您的程序集是动态加载的,您可以使用反射找出所有实现公共(public)接口(interface)的类,例如 ISensorMethod (在一个共同的装配体中)。所有的集会都必须知道它。这个接口(interface)可以有一个方法,比方说 execute() ,以及能够识别该方法的标识符,例如 string Key { get; } .事实上,每个可重用代码都在一个单独的类中(每个方法一个类)。

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

对于“传感器”类:

您可以执行相同的系统:动态加载程序集,找出所有“Sensor”或“ISensor”类。公共(public)继承的传感器方法可以通过它们的 Key 调用可重用的方法。为此,您可以在每个 Sensor 中注入(inject)依赖项类(在构造函数中或带有属性),比方说 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");
}

// (...)
}

可以使用工厂设计模式来实例化正确的传感器类...根据您的需要,有很多可能性。我建议尽可能少地使用反射,因为如果发生错误,它总是在非常棘手的代码中,并且问题的根源通常很远......除非所有异常和错误都非常小心地处理并带有有意义的错误消息(明确开发者秒定位问题真正根源)。

最好的问候,

关于c# - 动态组织和调用 C# 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571617/

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