我不确定这是否可能像我尝试的那样。我可能会接近它,所以我会试着解释一下这个大局。我对这种编程很陌生。
我使用NationalInstruments.VISA库来访问设备。当您打开连接时,库会确定它的连接类型并加载要匹配的接口,这使您可以访问该连接的所有配置字段。该程序提取XML文件以调用已保存的连接及其配置。
在我的程序中,我希望有一个对象数组来定义所有调用的连接设置,以便在需要时可以引用它们。 我虽然无法弄清楚如何定义这组对象。
这是我在定义对象后如何使用这些对象的一般示例。
public class Device
{
public string type;
}
public class Serial
{
public int baudrate;
public string serialstuff;
}
public class GPIB
{
public int addr;
public string gpibstuff;
public string more stuff;
}
public example()
{
Device[] devlist = new Device[2];
devlist[0]=new Serial();
devlist[1]=new GPIB();
foreach (Device dev in _devlist)
{
if (dev.type == serial) //send serial settings
if (dev.type == gpib) //send gpib settings
}
}
我尝试过的方法似乎让我很接近,但我似乎无法直接将数组声明为该子类来访问子类的字段。我可能只是接近这个错误,但我还没有找到另一种方法。
答案 0 :(得分:1)
您缺少一些继承,以使您的代码正常工作
public abstract class Device
{
public string type;
}
public class Serial : Device
{
public int baudrate;
public string serialstuff;
}
public class GPIB : Device
{
public int addr;
public string gpibstuff;
public string more stuff;
}
并通过类型转换为适当的并发类型
if (dev.type == serial)
{
(dev as Serial).baudrate
}
答案 1 :(得分:0)
Device[] devlist = new Device[2];
该行告诉您variable
devlist
是array
type
的{{1}}。这意味着,它只能接受来自Device
的直接objects
或implementation
的{{1}}。
因此,如果您将inherits
和Device
视为类型为Serial
的更具体GPIB
,则可以使用此类implementation
Device
inheritance
或者更好,让class Serial : Device
像这样class GPIB : Device
Device