Autor Beitrag
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 15.08.10 13:31 
Ich stehe immer wieder vor der Entscheidung Eigenschaft vs. Methode und habe eigentlich keine Entscheidungsgrundlage die man dafür anwenden sollte.

Nehmen wir an eine Klasse A speichert einen String. Zusätzlich soll man einen String abfragen können, welcher den Wert des ersten String ohne alle Buchstaben 'a' wiedergibt. (Nicht das Beste Beispiel aber ich denke ausreichend.)

Zwei Möglichkeiten ...
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
class A : System.Object
{
  public virtual System.String S
  {
    get;
    set;
  }

  // Möglichkeit 1
  public virtual System.String SReduced
  {
    get
    {
      return this.S.Replace("a", System.String.Empty);
    }
  }

  // Möglichkeit 2
  public virtual System.String GetSReduced( )
  {
      return this.S.Replace("a", System.String.Empty);
  }
}


SReduced und GetSReduced sind im Prinzip gleich. Eine Methode wird unausweichlich, wenn man noch einen Parameter zur Ermittlung eines Funktionswertes braucht. Aber so ...

Also wenn es einen Entscheidungsstandard gibt, dann interessiert er mich.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 15.08.10 14:07 
Gibt es, unter den Design Guidelines: msdn.microsoft.com/e...ibrary/ms229054.aspx
Ich denke, in diesem Fall spricht nichts gegen zwei Properties :) .

PS: Was mir an deinen Quelltexten aufgefallen ist: Wozu so oft virtual?

_________________
>λ=
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 15.08.10 22:28 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es, unter den Design Guidelines: msdn.microsoft.com/e...ibrary/ms229054.aspx


Ok. ^^ Danke. Eigentlich völlig logisch.

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
PS: Was mir an deinen Quelltexten aufgefallen ist: Wozu so oft virtual?


Ich will eine saubere Vererbung gewährleisten, denn ich lege wirklich großen Wert darauf, dass ich den Member der tatsächlichen Klasse einer Instanz aufrufe. Daher habe ich mir grundsätzlich angewöhnt virtuell zu implementieren.

Der WebClient und HttpWebRequest waren für mich nicht ausreichend. Jetzt arbeite ich an einem TcpClient, der Requests verschiedener Anwendungsschichten (HTTP, SMTP, etc.) in einem Request-Stack aufnimmt und diese je nach Request-Priorität abarbeitet. Bezogen auf den Stack arbeite ich immer mit dem Interface bzw. der abstrakten Basisklasse für TcpClient-Plugins. hier geht es ohne Virtualität nicht.

(P.S.: Mir ist klar, das interface-Member und abstrakte Member implizit virtuell sind.)