gpt4 book ai didi

c# - 如何找到实现接口(interface)的类

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:32 24 4
gpt4 key购买 nike

我的 WinForms、基于 C# 的应用程序有一个架构问题。我真的希望有人能告诉我如何解决这个问题。

我有不同的类实现接口(interface) ITest1 或 ITest2 或两者。

class1 : ITest1
class2 : ITest1, ITest2
class3 : ITest2

在应用程序开始时,我有一些配置源告诉应用程序在 ITest1 和 ITest2 的应用程序的整个生命类型(类 1、类 2 或类 3)中使用哪些类

ITest1 test1;
ITest2 test2;
switch (configresult)
{
case "configuration1":
test1 = new class1();
test2 = new class2();
break;
case "configuration2":
test1 = new class2();
test2 = new class3();
break;
case "configuration3": // This happens the most!
test1 = new class2();
test2 = (class2)test1;
break;
}

现在我想知道在运行时哪个类实现了某个接口(interface)。在伪代码中:

if( test1 is implemented by class2 )
((class2)test1).Class2Method();

if( test2 is implemented by class1 )
((class1)test1).Class1Method();

有没有办法通过可用的接口(interface)变量找出用于实现接口(interface)的类?

在实际程序中,我有超过 10 个接口(interface),由 40 多个类以完全不同的方式实现,因此我不想在需要转换回原始类的所有时刻执行任何 switch 语句。

----------------更新!

我想一些背景信息可以更容易地解决我的问题,是的,我同意 Ed S. 的观点,这更多是关于我的设计的问题,但我非常愿意改变这一切。

我的科学应用程序支持 40 多种不同的科学仪器来测量半导体。温度、电流、电压、开关,应有尽有。我定义了10个可供用户使用的功能:温度、电压、电流、开关等……这些都放在接口(interface)中; I温度、I电压等...

有些仪器可以做任何事情,有些只能做部分。如果用户有一个支持的高质量温度测量设备,我们用它来实现 ITemperature,但是当他/她有一个昂贵的电压表也可以测量温度时,我使用相同的仪器来测量温度和电压(所以仪器实现了 ITemperature和 IVoltage)。所有乐器都非常非常不同,几乎不可能创建一个抽象类来涵盖所有乐器。有些需要通过网络界面进行控制,有些需要通过 USB 进行控制,相信我,很多事情都不一样。所以有时我需要直接访问仪器类(重置寄存器、初始化或其他)。这就是我试图做的。非常欢迎任何建议。

最佳答案

记录了 is 关键字 here尽管从您的问题听起来您的架构中存在更大的问题。

if( test1 is class2 )
((class2)test1).Class2Method();

if( test2 is class1 )
((class1)test1).Class1Method();

关于c# - 如何找到实现接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828059/

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