Frage

In Anbetracht „privat“ ist der Standard Zugriffsmodifikator für die Teilnehmer, warum ist das Schlüsselwort selbst benötigt?

War es hilfreich?

Lösung

Es ist für Sie (und zukünftige Maintainer), nicht der Compiler.

Andere Tipps

Es gibt eine gewisse Menge an Fehlinformationen hier:

  

„Der Standard Zugriffsmodifikator nicht privat, sondern intern“

Nun, das hängt davon ab, was du redest. Für Mitglieder einer Art, es ist privat. Für Top-Level-Typen selbst, es ist intern.

  

"Privates ist nur die Standardeinstellung für Methoden auf einer Art"

Nein, es ist die Standardeinstellung für alle Mitglieder von einem Typ -. Eigenschaften, Ereignisse, Felder, Operatoren, Konstruktoren, Methoden, verschachtelte Typen und alles, was ich vergessen habe,

  

„Eigentlich, wenn die Klasse oder Struktur nicht mit einem Zugriffsmodifikator wird standardmäßig intern deklariert“

Nur für Top-Level-Typen. Bei verschachtelten Typen, es ist privat.

Anders als für die Einschränkung Eigenschaft Zugang für einen Teil, aber nicht die andere, der Standard ist grundsätzlich immer „so restriktiv wie möglich sein.“

Persönlich Zitter ich auf die Frage, ob explizit zu sein. Der „Pro“ für den Standard ist, dass es überall betont, dass man etwas mehr sichtbar als die restriktivsten Ebene macht. Die „Pro“ für die explizite Angabe ist es, dass es für diejenigen, mehr offensichtlich ist, die die oben genannte Regel nicht kennen, und es zeigt, dass man darüber etwas gedacht haben.

Eric Lippert geht mit der expliziten Form, und ich fange an, dass die Art und Weise zu lehnen.

Siehe http://csharpindepth.com/ViewNote.aspx?NoteID=54 für ein bisschen mehr zu diesem Thema.

Explizit. Ich benutze den Standard nie und immer explizit den Modifikator hinzuzufügen.

Dies könnte wegen meiner Java Hintergrund, wo die Standard ‚Paket‘ (entspricht etwa ‚intern‘ in C #) und so die Differenz immer störte mich war. Ich fand Explizit vorzuziehen zu sein.

ich ReSharper auch jetzt verwendet werden, die standardmäßig explizit zu werden, so dass es nur bestätigt und meine Vorurteile verstärkt:)

Der private Modifikator erklärt Absicht.

Eine private Variable ist nicht für die direkte Manipulation außerhalb der Klasse bestimmt. get / set-Accessoren können oder auch nicht für die Variable erstellt werden können.

Eine private Methode ist nicht für den Einsatz außerhalb der Klasse bestimmt. Dies kann nur für interne Funktionalität sein. Oder Sie könnten einen Standardkonstruktor privat machen den Bau der Klasse ohne den Weg in Werte zu verhindern.

Der private Modifikator (und andere wie es) eine nützliche Art und Weise des Schreibens selbst dokumentierenden Code sein können.

Wie von Jon Skeet in seinem Buch darauf hingewiesen, C # In Depth , es gibt einen Ort in C #, wo das Schlüsselwort private erforderlich ist, um eine Wirkung zu erzielen.

Wenn mein Gedächtnis nicht trügt, ist das Schlüsselwort private der einzige Weg, um eine privat scoped Eigenschaft Getter oder Setter zu schaffen, wenn ihr Gegenteil hat mehr als private Zugänglichkeit. Beispiel:

public bool CanAccessTheMissileCodes
{
    get { return canAccessTheMissileCodes; }
    private set { canAccessTheMissileCodes = value; }
}

Das Schlüsselwort private ist erforderlich um dies zu erreichen, weil eine zusätzliche Eigenschaft Zugänglichkeits Modifikator kann nur den Umfang verengt, erweitert es nicht. (Sonst hätte man in der Lage, eine private (Standardeinstellung) Eigenschaft zu erstellen und dann einen öffentlichen Modifikator hinzuzufügen.)

Privat ist nur die Standardeinstellung für Methoden auf eine Art, aber der private Modifikator wird an anderer Stelle verwendet wird.

C # Language Specification 3.0 (Msdn) Abschnitt 3.5. 1

  

Je nach Kontext, in dem ein Mitglied Erklärung stattfindet, nur bestimmte Arten von erklärt Zugänglichkeit sind zulässig. Darüber hinaus, wenn ein Mitglied Erklärung enthält keine Zugriffsmodifikatoren, den Kontext, in dem die Deklaration erfolgt bestimmt die Standard-Zugriffsdeklaration.

     
      
  • Namensräume haben implizit den Zugriff public. Keine Zugriffsmodifikatoren auf Namespace-Deklarationen erlaubt.
  •   
  • Typen können öffentlich oder intern erklärt Zugänglichkeit und Standard haben in Übersetzungseinheiten oder Namespaces deklariert   interne erklärt Zugänglichkeit.
  •   
  • Die Schüler eine der fünf Arten von erklärt Zugänglichkeit und standardmäßig privat deklarierten Zugänglichkeit haben. (Beachten Sie, dass ein Typ, der als Mitglied einer Klasse deklariert eine der fünf Arten von erklärt Zugänglichkeit haben kann, während ein Typ, der als Mitglied eines Namespace deklariert sind, können nur öffentliche oder interne erklärt Zugänglichkeit haben.)
  •   
  • Struct Mitglieder können öffentlich, intern haben oder private deklarierte Zugänglichkeit und standardmäßig privaten deklarierte Zugänglichkeit, weil structs implizit versiegelt ist. Struct Mitglieder in einer Struktur eingeführt (das heißt, nicht von dieser Struktur geerbt) nicht geschützt haben oder interne erklärt Zugänglichkeit geschützt. (Beachten Sie, dass ein Typ, der als Mitglied einer Struktur deklariert Öffentlichkeit haben kann, interne oder private deklariert Zugänglichkeit, während ein Typ, der als Mitglied eines Namespace deklariert sind, können nur öffentliche oder interne erklärt Zugänglichkeit haben.)
  •   
  • Schnittstelle Mitglieder haben implizit den Zugriff public. Keine Zugriffsmodifikatoren auf Interface-Member-Deklarationen erlaubt.
  •   
  • Aufzählung Mitglieder haben implizit den Zugriff public. Keine Zugriffsmodifikatoren auf Enumerationsmember Erklärungen sind nicht zulässig.
  •   

Für completenes. Und manche Menschen tatsächlich in ihrem Code über die Zugriffsmodifikatoren auf ihren Methoden, um explizit bevorzugen.

Für Symmetrie und mit Codierung Stilen entsprechen, die alles wie explizit zu sein (persönlich mag ich es ...)

Mit privaten Ihre Absicht explizit signalisiert und lässt Anhaltspunkte für andere, die Ihren Code unterstützen;)

Einige Codierung Arten wird empfohlen, zuerst alle „öffentlichen“ Elemente setzen, gefolgt von den „privaten“ Artikel. Ohne eine „private“ Stichwort, Sie konnte es nicht auf diese Weise um.

Update: Ich habe nicht bemerkt, den "c #" Tag auf dieser so meine Antwort mehr auf C ++ als C # gilt

.

ich in der Regel privat auslassen, aber ich finde es nützlich für die Aneinanderreihung Code:

private   int    x;
public    string y;
protected float  z;

VS:

int x;

public    string y;
protected float  z;

Wie Robert Paulson in seiner Antwort sagte der private Modifikator nur nicht auf Mitglieder, sondern auch auf Typen . Dies wird wichtig, weil die Standardeinstellung für Typen ist internal die unbeabsichtigt austreten kann, wenn Sie die InternalsVisibleToAttribute .

Eigentlich, wenn die Klasse oder Struktur ist nicht mit einem Zugriffsmodifikator wird standardmäßig intern deklariert.

Also, wenn Sie wollen, dass es privat, privat nutzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top