Hallo, ich bin noch Anfänger in C#; nun hat sich bei mir ein Problem ergeben, bei dem ich einen Tipp gebrauchen kann. Ich möchte im Konstruktor der abgeleiteten Klasse über eine Eigenschaft eines Feldes, das in der abstrakten Basisklasse deklariert ist, auf das Feld der abstrakten Basisklasse zugreifen. Wie kann ich das sinnvoll machen? Das ist die Idee, die ich hatte: public abstract class BaseClass { private int _a1; public int a1 { get; set; } } public class DerivedClass : BaseClass { public DerivedClass (int a2) { //hier soll das Feld a1 über ihre Eigenschaft gesetzt werden. } } Ich danke schon mal für eure Ratschläge! Gruß, Lasse
Du hast doch in der Basisklasse einen public setter, den sollte man auch im Konstruktor aufrufen können, ansonsten mußt du das feld protected machen.
ich habe es jetzt nicht getestet aber es müsste so gehen: public class DerivedClass : BaseClass { public DerivedClass (int a2) { a1 = 12; } }
Hi Lasse,
1 | public abstract class BaseClass |
2 | {
|
3 | private int _a1; |
4 | |
5 | public int a1 |
6 | {
|
7 | get; |
8 | set; |
9 | }
|
10 | }
|
dieser Code ist nicht so ganz sinnvoll. Entweder:
1 | public abstract class BaseClass |
2 | {
|
3 | public int a1 |
4 | {
|
5 | get; |
6 | set; |
7 | }
|
8 | }
|
oder aber:
1 | public abstract class BaseClass |
2 | {
|
3 | private int _a1; |
4 | |
5 | public int a1 |
6 | {
|
7 | get { return _a1; } |
8 | set { _a1 = value; } |
9 | }
|
10 | }
|
Ansonsten gilt das von Läubi und Peter II geschriebene. Gruß Markus
Markus V. schrieb: > oder aber:public abstract class BaseClass > { > private int _a1; > > public int a1 > { > get { return _a1; } > set { _a1 = value; } > } > } Das ist mir auch schon aufgefallen, aber trotzdem danke für den Hinweis. Läubi .. schrieb: > Du hast doch in der Basisklasse einen public setter, den sollte man auch > im Konstruktor aufrufen können Das geht leider nicht so einfach, weil der Compiler dann nach einem Objektverweis verlangt.
Lasse schrieb: > Das geht leider nicht so einfach, weil der Compiler dann nach einem > Objektverweis verlangt. dann zeig mal den code und den genauen fehler dazu
Der Code steht oben; die Fehlermeldung lautet wie folgt: Für das nicht statische Feld, die Methode oder die Eigenschaft ist ein Objektverweis erforderlich.
Lasse schrieb: > Der Code steht oben; die Fehlermeldung lautet wie folgt: public DerivedClass (int a2) { //hier soll das Feld a1 über ihre Eigenschaft gesetzt werden. } zu greifst doch überhaupt nicht auf a1 zu - also kann die Fehlermeldung ja nichts damit zu tun haben.
Oh, irgendwie habe ich da was übersehen. Das Problem ist gelöst, und zwar so: public abstract class BaseClass { private int _a1; public int a1 { get { return _a1; } set { _a1 = value; } } } public class DerivedClass : BaseClass { public DerivedClass (int a2) { a1 = a2; } } Ich bedanke mich für konstruktive Ratschläge!
Das ganze funktioniert natürlich auch mit automatisch implementierten Eigenschaften (siehe http://msdn.microsoft.com/de-de/library/bb384054.aspx), die du im Startpost verwendet hast, du darfst dann aber kein privates Feld für die Property erstellen, das wird automatisch(!) erstellt, du musst im Konstruktor den Namen der Property aufrufen, also so: public abstract class BaseClass { public int A1 { get; set; } } public class DerivedClass : BaseClass { public DerivedClass(int a2) { A1 = a2; } } BTW: Propertys werden in C# groß geschrieben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.