Soweit ich weiß, private
ist der Standard überall in C # (was bedeutet , dass , wenn ich nicht schreiben public
, protected
, internal
etc. es wird private
standardmäßig aktiviert ). (Bitte korrigieren Sie mich, wenn ich falsch liege.)
Was ist der Grund, dieses Schlüsselwort zu schreiben, oder warum gibt es es überhaupt für Mitglieder?
Wenn ein Ereignishandler beispielsweise automatisch generiert wird, sieht er folgendermaßen aus:
private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{
}
Aber warum schreibt es überhaupt privat, wenn dies impliziert und standardmäßig ist? Nur damit unerfahrene Entwickler (die nicht wissen, dass es sich um den C # -Standard handelt) wissen, dass es privat ist? Oder gibt es einen Unterschied für den Compiler?
Darüber hinaus gibt es einen Fall , in den „privaten“ (allein) Schreiben wird die Zugänglichkeit des Elements ändern?
quelle
internal
standardmäßig.Antworten:
Das ist nicht wahr. In einem Namespace definierte Typen (Klassen, Strukturen, Schnittstellen usw.) sind standardmäßig intern . Außerdem haben Mitglieder in verschiedenen Typen unterschiedliche Standardzugriffsmöglichkeiten (z. B. public für Schnittstellenmitglieder). Weitere Informationen finden Sie unter Eingabehilfen auf MSDN.
Ebenfalls,
Wenn Sie dies explizit angeben, können Sie Ihre Absicht angeben, den Typ sehr explizit privat zu machen. Dies hilft bei der Wartbarkeit Ihres Codes im Laufe der Zeit. Dies kann anderen Entwicklern (oder Ihnen selbst) helfen, zu wissen, ob ein Mitglied standardmäßig oder absichtlich privat ist usw.
quelle
private
.get
undset
standardmäßig auf die Zugänglichkeit der Eigenschaft selbstNicht ganz - die Standardeinstellung ist "der am stärksten eingeschränkte Zugriff, der für diese Deklaration verfügbar ist". So ist beispielsweise bei einem Typ der obersten Ebene die Standardeinstellung
internal
: Für einen verschachtelten Typ ist der Standardwertprivate
.Es macht es explizit, was aus zwei Gründen gut ist:
Wie für Ihren letzten Teil:
Ja, um die Hälfte einer Immobilie restriktiver zu gestalten als die andere:
Ich verwenden , mit Ausfällen zu gehen überall konnte ich, aber ich habe davon überzeugt, (teilweise von Eric Lippert) , dass macht es klar , dass Sie darüber nachgedacht haben und beschlossen , etwas privat zu machen ist eine gute Idee.
Persönlich wünsche ich es gab , dass eine Art und Weise zu tun , für versiegelte / entsiegelt auch für Typdeklarationen - möglicherweise nicht einmal hat eine Standard. Ich vermute, dass viele Entwickler (ich selbst eingeschlossen, wenn ich nicht aufpasse) Klassen nicht versiegelt lassen, nur weil es weniger Aufwand ist, sie zu versiegeln.
quelle
final
eines typischeren Beispiels ermöglicht.private
fügt visuelle Unordnung hinzu. Für diejenigen, die darauf bestehen, dass es die Dinge explizit macht, würde ich fragen: Tun Sie das auch mit Mathematik? Zum Beispiel:Finden Sie das unklar ohne redundante Klammern
b / c
?Die Regel in C # ist sehr einfach: Standardmäßig ist alles so nah wie möglich an privat. Also , wenn Sie etwas brauchen , um mehr zu sehen als der Standard, fügen Sie einen Modifikator. Andernfalls fügen Sie Ihrem Code keine unnötigen Schlüsselwörter hinzu.
quelle
Friend
zum Beispiel für Mitglieder. C # macht seine Sichtbarkeit standardmäßig richtig: Die Dinge sind auf die geringstmögliche Sichtbarkeit eingestellt, sofern sie nicht geändert werden. Nach allem, was ich finden kann, scheint dies auch für C ++ zu gelten (außer für Strukturen). (Es scheint nicht wahr zu sein für F #.)var
, weil es die visuelle Unordnung verringert, und dennoch sind so viele Menschen dafür, sinnlos zu tippenprivate
.Wenn Sie explizit privat deklarieren , wissen Sie, dass es privat ist. Denken Sie nicht nur, dass es so ist, denn soweit Sie wissen, ist es die Standardeinstellung. Dies bedeutet auch, dass jemand anderes, der sich den Code ansieht, weiß, was er ist.
Es gibt kein "Ich denke es ist", "Ich bin mir ziemlich sicher, dass es ist" usw. Es ist einfach so . Und jeder ist auf der gleichen Seite.
Ich bin kein C # -Entwickler. Wenn ich mit Code arbeiten müsste , der nicht explizit als privat deklariert wurde , würde ich wahrscheinlich annehmen, dass er intern ist .
Ich mag es nicht, wenn Dinge implizit festgelegt sind. Es ist nie so klar wie wenn sie explizit festgelegt sind.
quelle
Lesbarkeit - Möglicherweise weiß nicht jeder, dass privat das Standardverhalten ist.
Absicht - Gibt einen klaren Hinweis darauf, dass Sie die Eigenschaft ausdrücklich als privat deklariert haben (aus welchem Grund auch immer).
quelle
Lesbarkeit und Absichtserklärung sind zwei gute Gründe, die mir einfallen.
quelle
Ein guter Grund für die explizite Angabe der Sichtbarkeit ist, dass Sie nicht über die Standardeinstellung für den Kontext nachdenken müssen, in dem Sie sich befinden.
Ein weiterer guter Grund ist, dass FxCop Sie dazu auffordert.
quelle
Viele Leute (Leute wie ich!) Programmieren regelmäßig in einer Handvoll verschiedener Sprachen. Wenn ich mit solchen Dingen explizit bin, muss ich mich nicht an alle arkanen Details aller Sprachen erinnern, in denen ich programmiere.
quelle
private
" ein arkanes Detail ist ... Aber ich verstehe den Punkt. Neulich fiel es mir schwer, mich daran zu erinnern, wie das Framework, das ich letzte Woche verwendet habe ( MEF ), funktioniert hat.Ich würde aus Gründen der Übereinstimmung mit der Lesbarkeit des Umfangs des Restes der Klasse sagen.
quelle