C#: aus Konstruktor auf Eigenschaften zugreifen

Gast #2137525
Lesenswert?

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
Gast #2137548
Lesenswert?

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
Gast #2137557
Lesenswert?

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.
Gast #2137571
Lesenswert?

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.
Gast #2137577
Lesenswert?

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!
#2137610
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren