Entwickler-Ecke

Basistechnologien - Datenzugriff inerhalb einer Klasse


Leuchtturm - Mi 10.10.07 14:29
Titel: Datenzugriff inerhalb einer Klasse
Hi,
ich stelle mir gerade die Frage ob man innerhalb einer Klasse auf die Variable oder auf die Fields zugreifen sollte. Was meint ihr dazu :?:
BSP:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public class Auto
{
    private int _hubraum;
    public int Hubraum
    {
      get{ return _hubraum }
      set{ _hubraum = value }
    }
    public Auto()
    {
         _hubraum = 1500;
    }
}

oder so:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public class Auto
{
    private int _hubraum;
    public int Hubraum
    {
      get{ return _hubraum }
      set{ _hubraum = value }
    }
      public Auto
    {
      Hubraum = 1500;   
    }

mfg
Leuchtturm :wave:


JüTho - Mi 10.10.07 15:54

Grundsätzlich wird empfohlen, über die Properties (in Deinem Beispiel: Hubraum) zuzugreifen: Im Setter können auch Gültigkeitsprüfungen angegeben werden; die werden dann auch innerhalb der Klasse ausgeführt. Bei "einfachen" Zuweisungen ist es aber gleichgültig. Jürgen


Leuchtturm - Mi 10.10.07 15:59

Vielen Dank für die Antwort. Ich wusste ja das Properties empfohlen werden, aber ich wusste halt nicht wie das innerhalb einer Klasse aussieht :wink:
Orell


Kha - Mi 10.10.07 18:12

Es gibt schon ein paar Fälle, in denen der Getter/Setter absichtlich übergangen werden soll, aber in allen anderen Fällen spricht einfach nichts gegen die Verwendung der Property. Ich würde am Liebsten das Feld innerhalb der Property definieren können (tut neben dem üblichen Information Hiding auch den IntelliSense-Augen gut), aber da muss ich wohl auf die Fertigstellung meiner eigenen .Net-Sprache warten :mrgreen: .


CSharper2 - Sa 14.03.09 13:05

hi zusammen,

ich hänge grad an folgendem problem:

ausgangssituation sind drei klassen A, B, C.

- klasse A definiert verschiedene properties (set, get).


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
private string _zeichen;
public string Zeichen
{
  get
  {
     return _zeichen;
  }
  set
  {
     _zeichen = value;
  }
}


- klasse B greift auf props von A zu und soll diese mit werten versehen; ferner eine C-methode aufrufen


C#-Quelltext
1:
2:
3:
4:
5:
A a = New A();
C c = New C();

a.Zeichen = "test";
c.schreibe();


- klasse C soll nun diesen wert "test" erstmal testweise in eine message packen


C#-Quelltext
1:
2:
3:
4:
5:
6:
A a = New A();

public void schreibe()
{
  Messagebox.Show(a.Zeichen); 
}


nun würde die messagebox aber hier nix anzeigen, da die property Zeichen aus A null ist.

ich will es vermeiden, oop untypischn mit globlen felden zu arbeiten.
aber irgendwie komme ich mit meiner variante auch nicht wirklich weiter.
wie erreiche ich nun, dass der wert für C erhalten bleibt??
möchte es aber auch zwingend so konstruieren, dass A wirklich nur die "datenklasse" ist, aus der sich die anderen klassen bedienen. B soll dabei die props aus A setzen und C (D, E, F...) diese auslesen und weiterverwerten.

könnt ihr mir in etwa folgen? könnt ihr meinen fehler feststellen???
und bitte mich nicht zerreißen. ;-)

danke und gruß
csharper2


Leuchtturm - Sa 14.03.09 13:51

Wenn ich dich jetzt richtig verstanden habe, wäre es imo am besten, wnen du a.zeichen als parameteran c.schreibe übergibst ;)
oder hab ich was falsch verstanden?
Vielleicht quatsch cih acuh totalen Schwachsinn. Ich hab schon länger nix größeres mehr programmiert :shock:


CSharper2 - So 15.03.09 13:29

mit der übergabe an c.schreibe ginge das schon.
nur wollte ich eben das vermeiden, alle methoden-aufrufe zu parametrisieren. :shock:

dann bräuchte ich in dem moment ja nicht mehr die properties aus klasse a. aber
die soll(te) ja meine datenklasse werden, aus der sich alle anderen bedienen. ;-)