Ich habe eine Klasse, die von einer anderen erbt, und ich möchte eine der Basisklassenfunktionen verwenden ... aber ich stoße auf ein Problem, wo Aufruf der Basisfunktion nicht die Membervariable aus der geerbten Klasse als I zurückgibt hatte gehofft.C# Vererbung, Zugriff auf untergeordnete Elemente mit Basisfunktionen?
Um mein Problem zu veranschaulichen, habe ich ein vereinfachtes Beispiel erstellt. Ich erwartete dieses Beispiel, um "5" auszugeben, aber es tut nicht :) Die Lösung scheint zu sein, dass ich die getInt() Funktion von myclass1 in myclass2 auch kopieren muss ... dann wird es funktionieren, aber das scheint zu besiege den Punkt der Vererbung von myclass1 (ich wollte vermeiden, die Funktion in jeder Klasse zu duplizieren).
class Program
{
static void Main(string[] args)
{
myclass2 myclass = new myclass2();
// Expected to output 5, but it actually outputs 0
Console.WriteLine(myclass.getInt());
}
}
struct s1
{
public string str;
public int num;
}
struct s2
{
public int num;
public int num2;
}
class myclass1
{
internal s1 mystruct;
internal int getInt()
{
return mystruct.num;
}
}
class myclass2 : myclass1
{
internal new s2 mystruct;
internal myclass2()
{
mystruct.num = 5;
}
}
Ja strager ist richtig. Stattdessen können Sie es einfach in der Basisklasse schützen und nicht deklarieren + initialisieren, einfach einstellen, als würde es geschützt und Klasse2 erben, es sollte Zugriff haben, ich glaube nicht, dass Sie das interne wollen. – David
Danke Jungs - leider muss die Art von Mystruct in beiden Klassen unterschiedlich sein. Das gesamte Projekt ist ein Wrapper um einige C++ - APIs und die API wird mit zwei verschiedenen Strukturen versioniert, die dasselbe darstellen. Die XP-Version der Struktur hat andere Inhalte als die Vista-Version und mein Code muss unabhängig vom Betriebssystem sein. Ich habe versucht, dieses Szenario im obigen Beispiel zu vereinfachen. Gibt es eine Möglichkeit, dies zu erreichen, ohne nur die Funktion getInt() in myclass2 zu kopieren? (Es scheint, als ob es keinen Sinn hat, in diesem Stadium zu erben) –
@DaveUK, Können Sie genauer auf Ihr Problem eingehen? Ist jede "Myclass" ein Betriebssystem? Hätten Sie nicht eine Betriebssystemklasse "Basis" und dann mehrere Betriebssystemspezifische Unterklassen? – strager