2016-05-12 2 views
1

これが可能かどうかはわかりません。私はそれが間違っているかもしれないので、私は少し大きな画像を説明しようとします。私はプログラミングのこの種のかなり新しいです。タイプのネストとフィールドへのアクセス

私は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

[Javaの内部クラスではC#](http://stackoverflow.com/questions/2367015/java-inner-classes-in-c-sharp)あなたが持っている問題を説明するかもしれません。表示されているコードが妥当であると思われる問題がある) –

答えて

1

あなたが行がvariableことを示しています、適切な同時タイプ

if (dev.type == serial) 
{ 
    (dev as Serial).baudrate 
} 
+0

ああ!これが私の必要なものです。私のコードには継承のものがありましたが、型キャストが不足していました。私はそれを入れて、私はすべてのフィールドに得ることができます。ありがとう! – nosjojo

0

Device[] devlist = new Device[2];

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; 
} 

と型キャストで動作するようにあなたのコードのために、いくつかの継承を欠けていますdevlistは、arraytypeDeviceです。意味は、それは直接implementationまたはinheritsからDeviceのどちらかであるobjectsしか受け入れることができません。

ので、あなたがこのようなDeviceinterfaceを行い、この

class Serial : Device

class GPIB : Device

またはより良いようinheritanceを使用することができますDeviceタイプのより具体的なimplementationとしてSerialGPIBを考慮すれば、

interface IDevice

関連する問題