2016-09-11 3 views
-1

2つの継承クラスがあります。これらのクラスにはいくつかの静的変数があります。私がしたいのは、オブジェクトの値をその子クラス名に設定し、親オブジェクトを持つ子クラスメソッドを呼びたいということです。サンプルコードは次のとおりです。変数の値をクラス名に設定する

class BlueSwitch : Switch { 
    public static string Foo = "bar"; 
} 

class Green : Switch { 
    public static string Foo = "bar2"; 
} 

Switch oSwitch = BlueSwitch; 
Console.WriteLine(oSwitch.Foo); // should print out "bar" but instead i get compiler error 
oSwitch = GreenSwitch; 
Console.WriteLine(oSwitch.Foo); // should print out "bar2" but instead i get compiler error 

これ以外のアイデアは何ですか?

+1

になります。スイッチoSwitch = BlueSwitch;はコンパイルされません。 'Switch oSwitch = new BlueSwitch(); 'のようなインスタンスを作成する必要があります。 – RafaelC

+0

クラスのインスタンスを経由して呼び出すには、インスタンスを' new'する必要があります。そして、それらのクラスの中で、値。しかし、静的な 'BlueSwitch.Foo'を介して呼び出すだけではどうですか?読み込み専用ではなく、誰でも変更できるので、静的フィールドを公開するのは悪い考えです – pinkfloydx33

答えて

2

あなたがここでやっていることは、非常に論理的ではありません。変数oスイッチのクラス名を指定しています。それは可能ではありません。あなたは何をすべき

は次のとおりです。

Switch oSwitch = new BlueSwitch(); 
// this will print bar 
oSwitch = new GreenSwitch(); 
// this will print bar2 

サイドノート

あなたのフィールドは静的であり、そしてあなたの変数oSwitchスイッチタイプです。あなたは正しいことをしたい場合は、どちらか(も悪いです)のパブリックフィールドに自分のクラスのフィールドを作成し、あなたにこれを与える静的なもの取り除く:

class BlueSwitch : Switch { 
    public string Foo = "bar"; 
} 

class Green : Switch { 
    public string Foo = "bar2"; 
} 

それとも、彼らは静的滞在させますが、あなたのことができますがコードは

string test = BlueSwitch.Foo; 
// writes bar 
test = GreenSwitch.Foo; 
// writes bar2 
関連する問題