Laden...

Warum Properties verwenden, wenn man auch ein Feld verwenden könnte?

Erstellt von afrix vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.429 Views
Thema geschlossen
A
afrix Themenstarter:in
1 Beiträge seit 2010
vor 13 Jahren
Warum Properties verwenden, wenn man auch ein Feld verwenden könnte?

Hallo,

ich bin relative neu in der Entwicklung mit C#, habe davor aber bereits in mehreren andern Sprachen programmiert!

Meine Frage:

Wenn ich in einer Klasse ein öffentliches Attribut erstellen möchte, mache ich das doch so:

private int meinAttribut;

public int MeinAttribut
{
    set { meinAttribut = value; }
    get { return meinAttribut; }
}

Was ist der Unterschied zu folgeder, viel einfacheren Zeile, die doch auch funktioniert, oder?

public int MeinAttribut;

Vor allem wird es für mich unklar, wenn es nicht einfache Datentypen wie Integer sind, sondern z.B. Listen. Da geht es ja nicht nur um "Setzen" und "Auslesen", sondern auch mal um die Länge abfragen, eine Methode der Liste aufrufen etc. Wie würde ich das mit der oberen Variante lösen?

Danke für eure Antworten!

Gruß
Andi

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

das sind keine Attribute (das ist in .Net was anderes) sondern Properties.
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 Wir erwarten ein gewisses Grundwissen. Im besagten Punkt findest du weitere Informationen zum Einstieg in C#.

Baka wa shinanakya naoranai.

Mein XING Profil.

1.002 Beiträge seit 2007
vor 13 Jahren

Hallo afrix,

die "viel einfachere Zeile" stellt kein Attribut dar, auch keine Eigenschaft (wie dein erstes Codebeispiel, das auf ein privates Feld zurückgreift), sondern ein öffentliches Feld. (Das sind allerdings, wie talla schon betont hat, Grundlagen, die wir hier voraussetzen.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

Gelöschter Account
vor 13 Jahren

Hallo afrix,

Das erstere ist ein Feld, welches durch ein Propertie (get-set) gekapselt ist.
Das letztere ist nur ein öffentliches Feld.

Das sind jedoch absolute Grundlagen und werden in wirklich jedem C# Buch behandelt. (siehe bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1)

Warum es die gibt und warum man nach außen hin eher Properties verwenden sollte, wurde hier schon oft genug besprochen. Außerdem wird dies auch in jedem Buch über Objektorientierung behandelt.

gruß
Jack

Ergänzung von herbivore: Kapselung erlaubt dem Objekt, Änderungen an den Properties zu verhindern, die das Objekt in einem fehlerhaften Zustand bringen würden oder bestimmte Aktionen als Reaktion auf die Änderung auszulösen (Stichwort: Events). Selbst wenn das zu Anfang noch nicht der Fall ist, sollte man trotzdem schon Properties verwenden, um bereit für nachträgliche Änderungen zu sein. Properties sehen zwar nach außen ähnlich aus wie öffentliche Felder, aber sind konzeptionell doch etwas wesentlich anderes. Felder sollten nie öffentlich sein. Verwende stattdessen immer Properties.

223 Beiträge seit 2009
vor 13 Jahren

Was ist der Unterschied zu folgeder, viel einfacheren Zeile, die doch auch funktioniert, oder?

public int MeinAttribut

Dies ist eine öffentliches Feld! Man sollte allerdings keine Felder nach außen hin zugänglich machen, verwende anstatt öffentlichen Feldern die Properties mit get und set wie du es oben geschrieben hast.

Bei einer Liste vom Typ MyObject würde das so aussehen:


public class MyClass
{
List<string> texts;

public MyClass(List<string> textList)
{
texts = textList;
}
//Anzahl der items in der Liste
public int Count
{
get { return texts.Count;}
}
}

Das sind Grundlagen welche du auch unter 📗 oder 🛈 nachlesen kannst!

Grüße Pico

Hinweis vor 13 Jahren

Ok genug der gleichlautenden Erklärungen 😉

Thema geschlossen