SOLVED - Zugriff auf public Elemente einer abgeleiteten Klasse
-
Hallo.
Ich habe eine Klasse "Gleichung" und bilde dann verschiedene Ableitungen davon, z.B. PoissonGleichung.
Das Ganze könnte so aussehen:
public class CEquation{ public string Name; public CEquation(string fName){ Name = fName; } }
Die Ableitung davon könnte so aussehen:
public class CPoissonEquation : CEquation{ public double DiffusionCoefficient; public CPoissonEquation(string fName, fDiffCoeff) : base(fName){ DiffusionCoefficient = fDiffCoeff; } }
In Wirklichkeit besitzen sowohl die Basis- als auch die abgeleitete Klasse viel mehr Elemente.
Jetzt möchte ich von außen auf das Element DiffusionCoefficient zugreifen, kann das aber nicht - wieso? Es ist doch alles als public definiert.
Auf die Elemente der Basisklasse kann ich zugreifen.Ich weiß, dass ich eine Funktion schreiben sollte, welche mir den Wert zurück gibt und dies Variable DiffusionCoefficient als private definieren sollte, aber es sind in Wirklichkeit sehr sehr viele Elemente und ich möchte quasi nur ein Tool schreiben, welches in ein paar Tagen fertig sein sollte. Die Klasse würde einfach explodieren.
Vielen Dank für die Hilfe und Gruß,
CJens
-
Ist die Variable denn vom Typ 'CPoissonEquation' (oder nur von der Basisklasse 'CEquation')?
Ansonsten mußt du halt casten:CEquation equation = ...; var poissonEquation = equation as CPoissonEquation; if (poissonEquation != null) { var x = poissonEquation.DiffusionCoefficient; }
PS: Die ungarische Notation (die Klassen mit dem C am Anfang) sind beim Lesen sehr störend
-
Hallo.
Also, ich leite die Klasse ab und möchte dann auf ein Element der abgeleiteten Klasse zugreifen. Die Variable ist also vom Typ CPoissonEquation und das Element ist auch nur in diesem abgeleiteten Typ enthalten.
Gleichung ist die Basisklasse.
Und davon leite ich dann einmal:
- CNavierStokes
- CPressureCorrection
und
- CPoissonEquationab.
Jeder dieser Typen hat dann spezifisch noch einige Elemente.
Tut mir leid mit der ungarischen Notation, aber ich arbeite mit dem InteroptService mit einer C++ Bibliothek und es gibt dann auch noch Structs mit dem gleichen Namen, so dass es einmal CEquation (die Klasse) in C# gibt und TEquation (die Structur) in C++.
-
Danke für die Mühe - Kommando zurück. Ein Neustart von Visual Studio 2015 wirkt manchmal wunder... oder ich hatte einfach nicht gespeichert.
Auf jeden Fall funktioniert es jetzt.Sorry für den Thread. Kann geschlossen werden.
/*schäm*/