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
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.
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
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.
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
Ok genug der gleichlautenden Erklärungen 😉