2009-02-26 12 views
0

Ich habe eine Superklasse, die eine Reihe von Variablen hat. z.B.Force-Variablen von Superklasse zugewiesen werden (zur Kompilierzeit)

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

... etc

Ich möchte garantieren, dass diese Variablen außer Kraft gesetzt (zugewiesen etwas Nützliches) in der Unterklasse erhalten, die von dieser übergeordneten Klasse, bei der Kompilierung erbt.

Gibt es eine elegante Möglichkeit, dies zu tun?

Antwort

9

Machen Sie alle Konstrukteure in der Basisklasse als Parameter nehmen, und setzte sie aus diesen Konstrukteuren:

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) 
{ 
} 

Hoffentlich sind sie private Felder wie auch immer, so Die abgeleitete Klasse konnte sie trotzdem nicht direkt setzen, oder? :)

+0

Jon, wie viele "Sie wetten mich nur darauf". Kommentare bekommst du an einem Tag? Ich frage mich nur :). . . –

0

Sie können keine virtuellen Felder in C# haben. Wenn Sie dies wirklich benötigen, können Sie Eigenschaften verwenden, die Sie dann überschreiben und einen Standardwert in Ihrer Unterklasse angeben.

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; 
    } 
    } 
} 
Verwandte Themen