Autor Beitrag
The_Dude1974
Hält's aus hier
Beiträge: 1

W98, XP, Linux
C# Express 2005
BeitragVerfasst: Mi 26.04.06 13:29 
Hallo,
kann man durch Vererbung Eigenschaften erweitern?

In meinem Bsp:
Ich habe 2 Klassen CSignalOut und CSignalIn. Beide erben von der abstrakten Klasse CSignal.
Bei beiden Klassen kann ich den aktuellen Wert abfragen. Aber nur bei CSignalOut kann ich einen
Wert setzen.

BeispielCode:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
abstract class CSignal
{
    protected double m_value = 0.0;
    // -- Eigenschaft um den Wert auszulesen --
    public virtual double Value 
  {
        get { return m_value; }
    }
}

class CSignalOut : CSignal
{
    public override double Value
  {
    // -- Eigenschaft um den Wert zu setzen --
        set { m_value = value; }
        // !!!! PROBLEM !!!!!
        // base.Value      Funktioniert nicht!
        // get { base.Value } Funktioniert auch nicht!
  }
}


Gibt es irgendwie eine Möglichkeit das Problem sauber zu lösen?
Im voraus vielen Dank.

Moderiert von user profile iconraziel: C#-Tags hinzugefügt
r2c2
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 324
Erhaltene Danke: 2

Linux

BeitragVerfasst: Do 27.04.06 13:56 
Geb nicht allzu viel auf, das, was ich jetzt sage, aber wie willst du das "sauberer" lösen? IMHO is das schon relatv "sauber". Das einzige, was mir noch einfällt, wär folgendes:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
abstract class CSignal   
{   
    protected double m_value = 0.0;   
    // -- Eigenschaft um den Wert auszulesen --   
    public virtual double Value    
  {   
        get { return m_value; } 
        set; // Muss IMHO in abgeleiteter Klasse überschrieben werden...  
    }   
}

[meta]ganz so sicher bin ich mir da aber auch nicht. Mach noch nicht so lange C#...[/meta]

mfg

Christian

_________________
Kaum macht man's richtig, schon klappts!
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Sa 29.04.06 14:27 
Sauberer wäre wohl entweder
  • das Feld in der Basisklasse privat zu deklarieren und in den überschriebenen Accessors die Property des Vorgängers (base.Value) zu benutzen:
    ausblenden C#-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    10:
    11:
    12:
    13:
    14:
    15:
    16:
    17:
    18:
    abstract class Base
    {
      int value;

      public virtual int Value
      {
        get{ return value; }
      }

    }
    class Descendant
    {
      public override int Value
      {
        get{ return base.Value; }
      }

    }

  • ODER: Die Property abstract deklarieren:
    ausblenden C#-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    10:
    11:
    12:
    13:
    14:
    15:
    abstract class Base
    {
      public abstract int Value{ get; }

    }
    class Descendant
    {
      int value;

      public override int Value
      {
        get{ return value; }
      }

    }