Bitte erläutern Sie, wie C # -Eigenschaften funktionieren.

8

Ich lerne schon seit einiger Zeit C # und bin in meinem C # -Buch (Head First C #) auf Eigenschaften gestoßen. Ich verstehe ehrlich nicht, wofür sie gebraucht werden und warum ich sie benutzen sollte. Ich habe sie ein paar Mal gegoogelt, kann sie aber immer noch nicht verstehen.

Kann mir bitte jemand dieses fremde Konzept erklären?

Danke,

Varmitharen

    
Varmitharen 25.06.2011, 08:45
quelle

5 Antworten

4

Eigenschaften werden verwendet, um das Kapselungskonzept der objektorientierten Programmierung anzureichern.

d. Sie kapseln ein Feld-Mitglied und lassen Sie (der Entwickler) steuern, wie das Setzen / Holen dieser Variable erfolgt. Beispiel?

%Vor%

Siehe? Mit der Eigenschaft Age garantieren wir, dass der Mindestwert für das Alter 18 ist.

    
Kenan Deen 25.06.2011, 08:54
quelle
17

Eigenschaften bieten kontrollierten Zugriff auf Daten; im einfachsten Fall kann es nur bedeuten, ein Feld zu kapseln (öffentliche Felder werden nicht empfohlen), was der Compiler leicht machen kann:

%Vor%

Sie können jedoch die Eigenschaft verwenden, um Logik zu erzwingen oder Nebenwirkungen zu behandeln:

%Vor%

Andere gebräuchliche Optionen sind Lazy-Loading, berechnete Member, Proxy-Member usw.

Sie können auch die Zugänglichkeit ändern, zum Beispiel:

%Vor%

kann nur durch den Typ und die Unterklassen zugewiesen werden, nicht durch nicht verwandten Code. Es könnte auch nur ein get oder gesetzt haben.

Im Grunde handelt es sich bei Eigenschaften um eine formellere Version eines get / set-Paares von Methoden , wodurch es viel einfacher ist, über "Foo" als über "get_Foo" / "set_Foo" usw. zu sprechen ( für Zwei-Wege-Bindung).

Im Gegensatz zu Feldern können Eigenschaften auch auf Schnittstellen angekündigt werden, was für einen schnittstellenbasierten Code wesentlich ist

    
Marc Gravell 25.06.2011 08:51
quelle
17

Obwohl die anderen Antworten ziemlich gut sind, geht es ihnen sehr viel um den Mechanismus von Eigenschaften. Es ist auch hilfreich, die Philosophie von Eigenschaften zu verstehen.

Bei der OO-Programmierung verbringen wir viel Zeit damit, Modelle von semantischen Domänen zu erstellen. Wenn Sie sagen, dass Sie eine Klasse "Tier" und eine abgeleitete Klasse "Tiger" haben, modellieren Sie im Computerbereich eine Tatsache über die reale Welt: die aller Dinge auf der Welt, einige von ihnen sind Tiere und diese Tiere, einige von ihnen sind Tiger.

Aber Sie müssen verstehen, dass der Mechanismus und die Semantik verschieden sind. Niemand sagt "Hey, lass uns in den Zoo gehen und beobachten, wie Instanzen von Tierpflegern Methoden auf IFeedable auf den Instanzen der Tiger aufrufen".

Ein Feld ist ein Mechanismus und sollte daher ein privates Implementierungsdetail einer Klasse sein; Es beschreibt keinen Teil des Modells. Eine Eigenschaft ist ein Teil des semantischen Modells. Jeder Tiger hat Geburtstag, daher sollte "Birthday" Eigentum der Tiger-Klasse sein. Das ist Teil des "semantischen Modells" der Tiger, also entlarvt es als Eigentum. Als Implementierungsdetail kann der Geburtstag in einem privaten Feld gespeichert werden, auf das die Eigenschaft zugreift.

Macht das Sinn? Kurz gesagt: Verwenden Sie öffentliche Eigenschaften, um die semantischen Eigenschaften der Dinge zu beschreiben, die Sie modellieren; Verwenden Sie private Felder als Implementierungsmechanismen.

    
Eric Lippert 25.06.2011 15:54
quelle
1

Kennen Sie Felder? Wenn dies der Fall ist, sind Eigenschaften vom Code, der Ihre Klasse verbraucht, genau wie Felder. Innerhalb Ihrer Klasse ist eine Eigenschaft jedoch wie ein Paar von Methoden, eine, die sich mit der Rückgabe des Werts an den Konsumenten befasst, und eine Methode, die sich mit der Aktualisierung des Werts beschäftigt. Diese Methoden heißen im Allgemeinen getters und setters .

Ein guter Grund dafür, eine Eigenschaft anstelle eines Felds verwenden zu wollen, besteht darin, dass Sie damit die Werte, die in der Eigenschaft ein- und ausgehen, besser steuern können.

    
Peter Lillevold 25.06.2011 08:50
quelle

Tags und Links