2009-02-26 27 views
0

我有一個超類,它有一堆變量。 例如來自超類的強制變量被分配(編譯時)

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

...等

我想保證這些變量得到從這個超類繼承,在編譯時子重寫(指派一些有用的東西)。

是否有這樣做的elegent方式?

回答

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

喬恩,多少「你只是打賭我」。你一天得到的評論?就是想 :) 。 。 。 – 2009-02-26 12:01:25

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; 
    } 
    } 
} 
相關問題