2009-08-04 5 views
1

を使用する方法を私は「現時点ではこのサブクラスフィールドはクラスに属するが、多型

class Sub 
{ 
    private static string Colour = "orange"; 

    protected override string ColourProp { get{ return Sub.Colour; } } 
} 

のインスタンスで呼び出され、基本クラス

class Base 
{ 
    private static string Colour = "blue"; 
    string DoStuff() { return ColourProp; } 

    protected virtual string ColourProp { get{ return Base.Colour; } } 
} 

のメソッドを持っています仮想プロパティを使用して、これは唯一の方法ですか? (フィールドが仮想ではないことを考慮して)...

答えて

2

はい、これを実行するには、仮想プロパティまたは仮想メソッドのいずれかを使用する必要があります。 CLRは、オブジェクトのタイプ(すなわち多型)に基づいて、ColourPropへのすべての呼び出しを正しく動的にディスパッチします。

+0

ええ、私はちょうど(私の問題のために)カラーフィールドはクラスに属し、インスタンスには理想的ではないと思っていました...多分リフレクションやタイプを動的に呼び出すことができますか? – geejay

+0

これらはクラスに属していても構いませんが、静的メンバーでは多態性を行うことはできません。これを行うためにリフレクションを使用すると、「匂い」を構成します。たぶんあなたは一歩踏み出して、より高いレベルで達成しようとしていることを説明することができますか? –

+0

これを行うには、残酷で臭いがあると認めます。私は、クラス変数(基本的に各サブクラスから余分なプロパティを切り捨てるために、私がしなければならないことはフィールドを定義してからこれをスーパークラスで使用する)のような多態性を達成する方法があるかどうか疑問に思っています。 – geejay

0

これは完全にうまく見えます。仮想プロパティについて心配しないでください。これにより、他のオブジェクトに対するデータのカプセル化だけでなく、サブクラスに対するカプセル化も提供されます。

関連する問題