Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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/8/design-patterns/2.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#,向GUI宣布类设置 上下文_C#_Design Patterns - Fatal编程技术网

C#,向GUI宣布类设置 上下文

C#,向GUI宣布类设置 上下文,c#,design-patterns,C#,Design Patterns,我在一个C#项目中工作,在那里我有几个电气仪器,比如电源和电压表 每个仪器都有多种选择,例如,我们有两种不同类型的电源。对于每次运行,我们只连接到每种类型中的一种 例如,在我考虑的设计中,我希望每种类型都有一个通用接口 public interface PSU { public void connect(); public void disconnect(); ... } 接下来,在我的GUI中,我将注册将显示在菜单项下的所有可用PSU单元,在该菜单项中,每种类型只能选

我在一个C#项目中工作,在那里我有几个电气仪器,比如电源和电压表

每个仪器都有多种选择,例如,我们有两种不同类型的电源。对于每次运行,我们只连接到每种类型中的一种

例如,在我考虑的设计中,我希望每种类型都有一个通用接口

public interface PSU
{
    public void connect();
    public void disconnect();
    ...
}
接下来,在我的GUI中,我将注册将显示在菜单项下的所有可用PSU单元,在该菜单项中,每种类型只能选择其中一个

下一步我想做的是让这些单元以GUI可以从这些设置中创建子菜单的方式宣布它们的设置。 我的目标是这样,如果我添加另一个PSU,我只需要注册它


问题
  • 如何以可转换为菜单的方式提供设置
  • 如何将菜单事件连接到这些动态创建的子菜单?这些事件实际上应该会更新仪器设置
  • 这是一个有效且可维护的想法吗

谢谢你

你可以通过反射检查哪些类实现了你的IPSU(我发誓,总是用大写字母I启动一个接口,它有助于维护)

也许是这样的

var type = typeof(IPSU);
var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p));
当然,您可能需要使用activator来创建所述类型的实例,然后将它们传递给一个菜单类,也许是一个控制器

您可以创建一个IConvertToMenu,它实现构建特定菜单所需的所有值


我会这样做的

您可以通过反射检查哪些类实现了您的IPSU(我发誓,总是用大写字母I启动一个接口,它有助于维护)

也许是这样的

var type = typeof(IPSU);
var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p));
当然,您可能需要使用activator来创建所述类型的实例,然后将它们传递给一个菜单类,也许是一个控制器

您可以创建一个IConvertToMenu,它实现构建特定菜单所需的所有值


我会这样做的

谢谢你的回答,你能给我举个简短的例子,或者给我指一个我能读到的地方吗?谢谢,我刚刚在谷歌上搜索了指南、反射和C#,这个链接似乎很有希望:请注意,如果您对类、实例和接口的基本掌握不到位,这可能有点难以理解。(我不知道你的技能水平)谢谢你的回答,你能给我举个简单的例子或者给我指一个我能读到的地方吗?谢谢,我刚刚在谷歌上搜索了指南、反射和C#,这个链接似乎很有希望:请注意,如果您对类、实例和接口的基本掌握不到位,这可能有点难以理解。(我不知道你的技能水平)正如下面的回答评论中已经提到的,学习类、接口和继承是非常宝贵的。这一知识本身就回答了这个问题的大部分。然后,您只需要反射就可以找到相关的类并为它们创建菜单项。要学习的东西很多,但一旦理解了代码,就很少有代码了。祝你好运,玩得开心:)谢谢。我将开始学习,正如下面的回答评论中所提到的,学习类、接口和继承是非常宝贵的。这一知识本身就回答了这个问题的大部分。然后,您只需要反射就可以找到相关的类并为它们创建菜单项。要学习的东西很多,但一旦理解了代码,就很少有代码了。祝你好运,玩得开心:)谢谢。那我就开始学习