嵌套类型和访问字段

Nesting types and accessing fields

我不确定我尝试这样做是否可行。我可能走错了路,所以我会试着解释一下大局。我对这种编程很陌生。

我正在使用 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
    }
}

我尝试过的方法似乎让我很接近,但我似乎无法访问子classes的字段而不直接将数组声明为子class ].我可能只是接近这个错误,但我还没有想出替代方法。

为了使代码正常工作,您缺少一些继承

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
}

Device[] devlist = new Device[2];

该行告诉您 variable devlisttype Devicearray。意思是,它只能接受 objects,其中直接 implementationinherits 来自 Device

因此,如果您将 SerialGPIB 视为 Device 类型的更具体的 implementation,您可以像这样使用 inheritance

class Serial : Device

class GPIB : Device

或更好,使 Device 成为这样的 interface

interface IDevice