Beispielcode (alternativer Code ist unten),
%Vor% Können wir nicht direkt schreiben, indem wir myName
von privat auf öffentlich ändern, keine Anforderung, eine andere öffentliche Variable zu benennen, und keine Notwendigkeit, get und set zu verwenden?
alternativer Code
%Vor%Äußerlich sichtbare Eigenschaften sind besser als Felder, weil:
Eigenschaften ermöglichen eine bessere Kapselung . Felder sind eine feste Implementierung und ermöglichen den direkten Zugriff von Verbrauchern. Eigenschaften:
sind lose gekoppelt (da das zugrunde liegende Feld von Variable zu Datenbank jederzeit)
erlaubt benutzerdefinierte Logik (Validierung, Ereignisbenachrichtigung, Lazy Loading, etc.)
Kontrollzugriff (da die Logik in get / set eingebaut werden kann, sogar als schreibgeschützt oder schreibgeschützt deklariert).
Felder können nicht in Schnittstellen verwendet werden. Dies ist ein Hindernis für die Test Driven Development (Schnittstelle zuerst).
Automatische oder automatisch implementierte Eigenschaften lassen sich so einfach wie Felder deklarieren und auch so optimieren, dass sie mit Feldern vergleichbar sind. Siehe hier .
Das Deklarieren eines extern sichtbaren Feldes (public, protected, protected internal) ist eine FxCop-Verletzung . Siehe Regel CA1051 .
Das Ändern eines Felds in eine Eigenschaft ist eine brechende Änderung , da der aufrufende Code neu kompiliert werden muss (gilt auch für die binäre Serialisierung).
Eigenschaften werden von vielen .NET-Bibliotheken für erkannt für Aufgaben wie XML-Serialisierung, WPF-Bindungen, ASP.NET-2-Wege-Bindung usw. und auch von Visual Studio-Designer
Sie knacken eine der Grundlagen von OOP - & gt; Informationsverbergung / -verkapselung
Indem Sie Ihre Eigenschaften als öffentlich definieren, geben Sie JEDEM Zugriff darauf und sie können wie gewünscht geändert (beschädigt) werden. Auf diese Weise können Sie nicht versprechen, dass Ihre Objekte die ganze Zeit in einem konsistenten Zustand sind.
Von Wikipedia
In Programmiersprachen wird die Verkapselung verwendet, um sich auf eine von zwei verwandten, aber unterschiedlichen Begriffen zu beziehen, und manchmal auf die Kombination [1] [2] davon:
Einige Programmiersprachenforscher und Akademiker verwenden die erste Bedeutung allein oder in Kombination mit der zweiten als Unterscheidungsmerkmal der objektorientierten Programmierung, während andere Programmiersprachen, die lexikalische Schließungen bereitstellen, die Kapselung als ein Merkmal der zur Objektorientierung orthogonalen Sprache betrachten.
- Ein Sprachmechanismus zum Beschränken des Zugriffs auf einige der Objektkomponenten. [3] [4]
- Ein Sprachkonstrukt, das die Bündelung von Daten mit den Methoden (oder anderen Funktionen), die mit diesen Daten arbeiten, erleichtert. [5] [6]Die zweite Definition ist durch die Tatsache motiviert, dass das Ausblenden von Komponenten in vielen OOP-Sprachen nicht automatisch erfolgt oder überschrieben werden kann. Daher wird das Verstecken von Informationen von denjenigen, die die zweite Definition bevorzugen, als separater Begriff definiert.
In Ihrem Beispiel gibt es eigentlich keinen Unterschied zwischen diesen beiden Ansätzen. Im Allgemeinen haben Eigenschaften die Möglichkeit, sie nur für andere Klassen (mit privatem Setter) lesbar zu machen - das können Sie mit dem Feld nicht tun. Öffentliche Felder / Eigenschaften-Setter haben die Einkapselungsregel von OOP durchbrochen.
In OOP besteht die Konvention darin, alle Ihre Variablen vor Benutzern zu verbergen und stattdessen Getter und Setter zu verwenden, um mit ihnen zu manipulieren. Es gibt Fälle, in denen Sie den Variablenwert ändern müssen, bis er gespeichert wird. Zum Beispiel fordern Sie den Benutzer auf, einen Wert einzugeben, der Geschwindigkeit ist, und Benutzer geben den Wert in MPH ein, aber Sie möchten sie konvertieren und als Km / h oder m / s speichern. In diesem Fall macht es Sinn, Setter zu setzen. Es gibt auch Fälle, in denen Setter oder Getter privat sein sollen, damit die Variable nur gelesen oder nur geschrieben wird. Aber zusammenzufassen in OOP Convention ist die Verwendung von Setter und Getter anstelle von öffentlichen Variablen. Dies ist der Teil von Encapsulation Concept
Tags und Links c# encapsulation