2009-02-26 1 views
0

私は変数の束を持つスーパークラスを持っています。例: (コンパイル時に)スーパークラスからの強制変数を割り当てよう

string s1= ""; string s2= ""; string s3= ""; 

...など

私は、これらの変数はコンパイル時に、このスーパークラスから継承するサブクラスでオーバーライド(便利割り当てられた何か)を取得することを保証したいと思います。

これを行うためのエレガントな方法はありますか?

答えて

9

基本クラスのすべてのコンストラクタは、パラメータとしてそれらを取る、そしてそれらのコンストラクタからそれらを設定してください:

protected BaseClass(string s1, string s2, string s3) 
{ 
    this.s1 = s1; 
    this.s2 = s2; 
    this.s3 = s3; 
} 

...

// Just for example 
public DerivedClass(string x) : base("foo", "bar", x) 
{ 
} 

をうまくいけば、彼らはとにかく民間分野ですので、とにかく直接派生クラスでそれらを設定できませんでした。 :)

+0

ジョン、「あなたは私にそれを賭けてください」。コメントは一日で得るのですか?ただ疑問に思う。 。 。 –

0

C#で仮想フィールドを持つことはできません。これが本当に必要な場合は、プロパティを使用してオーバーライドし、サブクラスでデフォルト値を指定することができます。

public class A 
{ 
    private string s1; 
    public virtual string S1 
    { 
    get { return this.s1; } 
    } 
} 

public class B : A 
{ 
    private string myString = "default"; 
    public override string S1 
    { 
    get 
    { 
     return this.myString; 
    } 
    } 
} 
関連する問題