Was ist der Vorteil der Verwendung von privaten Variablen in C #?

7

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%     
michael 19.06.2013, 08:29
quelle

6 Antworten

14

Ä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

Channs 19.06.2013 08:37
quelle
10

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:
  - 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]

     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.

     

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.

    
bash.d 19.06.2013 08:32
quelle
0

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.

    
tdragon 19.06.2013 08:35
quelle
0

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

    
Dimitri 19.06.2013 08:36
quelle
0

Sie können, aber es ist nicht gut pratzie. Wenn Sie das private varaiable als Eigenschaft einschließen, haben Sie eine größere Kontrolle darüber, was Clients tun können und was nicht.

Wenn es ein wenig wortreich scheint, können Sie auch Folgendes verwenden:

%Vor%     
beaumondo 19.06.2013 08:36
quelle
0

Wie bash.d schrieb, sind dies Basen von OOP.

In diesem Fall würde ich empfehlen, den Namen in den Konstruktor zu schreiben:

%Vor%

Andere Möglichkeiten verwenden eine Methode, um den Wert festzulegen, wenn Sie das behandelte Objekt überprüfen können.

    
Smartis 19.06.2013 08:38
quelle

Tags und Links