mabue88
Goto Top

C-Sharp - Zugriff auf Eigenschaften von vererbter Klasse

Hallo,

ich habe mal wieder eine Frage, die für die Profis wahrscheinlich schnell zu beantworten ist.

Folgendes Szenario:

Ein C#-Programm empfängt über einen TCP-Client von einem Server Daten. Bei den Daten kann es sich prinzipiell um drei verschiedene Meldungstypen handeln. Grundsätzlich unterscheiden sich die Daten der Meldungen. Aber einige Eigenschaften sind Bestandteil aller drei Meldungstypen.

Momentan habe ich jeden Meldungstyp eine eigene Klasse erstellt. Darin werden die vom Server stammenden Daten ausgewertet, verarbeitet und in entsprechenden Eigenschaften gespeichert.

Mich stört aber, dass ich einige Eigenschaften in allen drei Klassen erstellen muss.

Mein Gedanke war es eine Grundklasse zu erstellen, in welcher die gemeinsamen Eigenschaften enthalten sind. Die Klassen zur Verarbeitung der einzelnen Typen sollen die Eigenschaften dann von dieser Grundklasse erben.

Die Umsetzung bekomme ich aber nicht hin.

Kann mir jemand an einem Minimalbeispiel (eine Grundklasse, eine davon abgeleitete Klasse) zeigen, wie das richtig gemacht wird?

Danke!

mabue

Content-Key: 245608

Url: https://administrator.de/contentid/245608

Printed on: April 24, 2024 at 09:04 o'clock

Member: colinardo
colinardo Aug 05, 2014 updated at 16:59:53 (UTC)
Goto Top
Hi mabue,
ein Beispiel für Vererbung mit Klassen findest du hier:
http://msdn.microsoft.com/de-de/library/ms173149.aspx

Du musst einfach nur an deiner abgeleitete Klasse die Mutterklasse per Doppelpunkt hinzufügen, dann kannst du auf die Eigenschaften und Methoden der Mutterklasse zugreifen, sofern du sie public deklariert hast. Deine Eigenschaften der Mutterklasse musst du natürlich im Konstruktor der Klasse initialisieren wenn sie schon Werte besitzen sollen, wenn du die Kindklasse erstellst.
z.B.
class Mutter
{
  public String muttername { get;set; }
  public void Methode1()
  {
    // mach was in der Mutterklasse
  }
}

class Kind : Mutter
{
  public void Methode2()
  {
   // setze eine Eigenschaft der Mutterklasse
   this.muttername = "Helga";  
  }
}
Benutzung der Klassen
// neues Kind erzeugen
Kind neuesKind = new Kind();

// Methode der Mutterklasse aufrufen
neuesKind.Methode1();

// Methode der Kindklasse aufrufen mit der eine Eigenschaft der Mutterklasse verändert wird
neuesKind.Methode2();

// veränderte Eigenschaft anzeigen
MessageBox.Show(neuesKind.muttername);
Grüße Uwe
Member: mabue88
mabue88 Aug 05, 2014 updated at 15:18:30 (UTC)
Goto Top
Hallo Uwe,

das habe ich versucht (zumindest glaube ich das):
class MessageBase
{
    public String DataString;
}

class MessageType1 : MessageBase
{
    public MessageType1(String data)
    {
        DataString = data;
    }
}

Visual Studio bringt aber die Fehlermeldung:
Einer Eigenschaft oder einem Indexer "MessageType1.DataString" kann nichts zugewiesen werden -- sie sind schreibgeschützt.
Member: colinardo
colinardo Aug 05, 2014 updated at 15:22:05 (UTC)
Goto Top
Du musst der Property sagen das sie beschrieben werden kann, und der Zugriff auf die Property erfolgt in der Kindklasse über das Keyword this.
class MessageBase
{
    public String DataString {get; set;}
}

class MessageType1 : MessageBase
{
    public MessageType1(String data)
    {
        this.DataString = data;
    }
}
Lese das Beispiel unter dem geposteten Link oben ... dann wird es klarer.
Member: mabue88
mabue88 Aug 13, 2014 at 06:20:20 (UTC)
Goto Top
Hallo colinardo,

mit dem Zugriffsmodifizierer 'protected' habe ich das hinbekommen, was ich wollte!

Danke
mabue