2009-02-26 19 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; 
    } 
    } 
} 
相关问题