嵌套类型和访问字段

时间:2016-05-12 17:01:05

标签: c# inheritance nested subclass abstraction

我不确定这是否可能像我尝试的那样。我可能会接近它,所以我会试着解释一下这个大局。我对这种编程很陌生。

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

我尝试过的方法似乎让我很接近,但我似乎无法直接将数组声明为该子类来访问子类的字段。我可能只是接近这个错误,但我还没有找到另一种方法。

2 个答案:

答案 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 devlistarray type的{​​{1}}。这意味着,它只能接受来自Device的直接objectsimplementation的{​​{1}}。

因此,如果您将inheritsDevice视为类型为Serial的更具体GPIB,则可以使用此类implementation

Device

inheritance

或者更好,让class Serial : Device像这样class GPIB : Device

Device