嵌套类型和访问字段
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
devlist
是 type
Device
的 array
。意思是,它只能接受 objects
,其中直接 implementation
或 inherits
来自 Device
。
因此,如果您将 Serial
和 GPIB
视为 Device
类型的更具体的 implementation
,您可以像这样使用 inheritance
class Serial : Device
class GPIB : Device
或更好,使 Device
成为这样的 interface
interface IDevice
我不确定我尝试这样做是否可行。我可能走错了路,所以我会试着解释一下大局。我对这种编程很陌生。
我正在使用 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
devlist
是 type
Device
的 array
。意思是,它只能接受 objects
,其中直接 implementation
或 inherits
来自 Device
。
因此,如果您将 Serial
和 GPIB
视为 Device
类型的更具体的 implementation
,您可以像这样使用 inheritance
class Serial : Device
class GPIB : Device
或更好,使 Device
成为这样的 interface
interface IDevice