Während meiner gesamten Studienzeit habe ich public
und würde gerne den Unterschied zwischen public
, private
y protected
?
Und was bedeutet static
tun, als nichts zu haben?
Während meiner gesamten Studienzeit habe ich public
und würde gerne den Unterschied zwischen public
, private
y protected
?
Und was bedeutet static
tun, als nichts zu haben?
De docs.microsoft.com :
Auf den Typ oder das Mitglied kann von jedem anderen Code in derselben oder einer anderen Baugruppe, die darauf verweist, zugegriffen werden.
Auf den Typ oder das Mitglied kann nur durch Code in derselben Klasse oder Struktur zugegriffen werden.
Auf den Typ oder das Mitglied kann nur durch Code in derselben Klasse oder Struktur oder in einer abgeleiteten Klasse zugegriffen werden.
private protected
(hinzugefügt in C# 7.2)Auf den Typ oder das Mitglied kann nur durch Code in derselben Klasse oder Struktur oder in einer abgeleiteten Klasse aus derselben Assembly zugegriffen werden, nicht aber aus einer anderen Assembly.
Auf den Typ oder das Mitglied kann von jedem Code in derselben Assembly zugegriffen werden, aber nicht von einer anderen Assembly.
Auf den Typ oder das Mitglied kann von jedem Code in derselben Assembly oder von jeder abgeleiteten Klasse in einer anderen Assembly zugegriffen werden.
Wenn kein Zugriffsmodifikator gesetzt ist, wird ein Standardzugriffsmodifikator verwendet. Es gibt also immer irgendeine Form von Zugriffsmodifikator, auch wenn er nicht gesetzt ist.
static
ModifikatorDer statische Modifikator einer Klasse bedeutet, dass die Klasse nicht instanziiert werden kann und dass alle ihre Mitglieder statisch sind. Ein statisches Mitglied hat eine Version, unabhängig davon, wie viele Instanzen seines umschließenden Typs erstellt werden.
Eine statische Klasse ist im Grunde dasselbe wie eine nicht-statische Klasse, aber es gibt einen Unterschied: eine statische Klasse kann nicht von außen instanziiert werden. Mit anderen Worten, Sie können das Schlüsselwort new nicht verwenden, um eine Variable des Klassentyps zu erstellen. Da es keine Instanzvariable gibt, greifen Sie auf die Mitglieder einer statischen Klasse zu, indem Sie den Klassennamen selbst verwenden.
Es gibt jedoch so etwas wie eine statischer Konstruktor . Jede Klasse kann eine davon haben, auch statische Klassen. Sie können nicht direkt aufgerufen werden und haben keine Parameter (außer den Typparametern der Klasse selbst). Ein statischer Konstruktor wird automatisch aufgerufen, um die Klasse zu initialisieren, bevor die erste Instanz erstellt wird oder auf statische Mitglieder verwiesen wird. Sieht so aus:
static class Foo()
{
static Foo()
{
Bar = "fubar";
}
public static string Bar { get; set; }
}
Statische Klassen werden oft als Dienste verwendet, Sie können sie wie folgt verwenden:
MyStaticClass.ServiceMethod(...);
Ein grafischer Überblick (Zusammenfassung auf den Punkt gebracht)
Eigentlich ist es etwas komplizierter als das.
Jetzt (ab C# 7.2) gibt es auch private protected, und es spielt eine Rolle, ob eine abgeleitete Klasse in der gleichen Assembly ist oder nicht.
Die Übersicht muss also erweitert werden:
Siehe auch die C#-dotnet-docs zu diesem Thema .
Seit statische Klassen versiegelt sind, können sie nicht vererbt werden (außer von Object), so dass das Schlüsselwort protected für statische Klassen ungültig ist.
Für die Standardeinstellungen, wenn Sie keinen Zugriffsmodifikator vorangestellt haben, siehe hier:
Standardsichtbarkeit für C#-Klassen und -Mitglieder (Felder, Methoden usw.)?
Nicht verschachtelt
enum public
non-nested classes / structs internal
interfaces internal
delegates in namespace internal
class/struct member(s) private
delegates nested in class/struct private
Verschachtelt:
nested enum public
nested interface public
nested class private
nested struct private
Außerdem gibt es das sealed-keyword, das eine Klasse nicht vererbbar macht.
Außerdem sind die Schlüsselwörter in VB.NET manchmal unterschiedlich, daher hier ein Spickzettel:
Abgeleitete Klasse in der gleichen Baugruppe können wir, andere können wir nicht. Ich dachte, Sie meinten wie in der gleichen Baugruppe...
Öffentlich - Wenn Sie die Klasse sehen können, können Sie auch die Methode sehen
Privat - Wenn Sie Teil von die Klasse, dann können Sie die Methode sehen, sonst nicht.
Geschützt - Wie bei Privat, plus alle Nachkommen kann auch die Methode sehen.
Statisch (Klasse) - Erinnern Sie sich an die Unterscheidung zwischen "Klasse" und "Objekt"? Vergessen Sie das alles. Sie sind dasselbe mit "static"... die Klasse ist die einzige Instanz von sich selbst.
Statisch (Methode) - Wann immer Sie diese Methode verwenden, hat sie einen Bezugsrahmen, der unabhängig von der tatsächlichen Instanz der Klasse ist, zu der sie gehört.
Ja, aber ich habe von einer statischen Klasse gesprochen. Ich habe einen separaten Eintrag hinzugefügt, um statische Methoden zu beschreiben. Danke für den Hinweis.
Objekt' ist vielleicht nicht der richtige Begriff, wenn es um C# geht, denn der Basistyp für alle Klassen ist System.Objekt . Instanz" wäre ein besseres Wort, oder "Objekt" (Kleinbuchstabe "O").
Wiederveröffentlichung der großartigen Diagramme von diese Antwort .
Hier sind alle Zugangsmodifikatoren in Venn-Diagrammen dargestellt, von eher einschränkend bis hin zu eher promiskuitiv:
private
:
private protected
: - hinzugefügt in C# 7.2
internal
:
protected
:
protected internal
:
public
:
Ein weiterer visueller Ansatz der aktuellen Zugriffsmodifikator (C# 7.2). Hoffentlich hilft das Schema, es sich leichter zu merken
(Klicken Sie auf das Bild für eine interaktive Ansicht.)
Wenn Sie Schwierigkeiten haben, sich an die zweisprachigen Zugangsmodifikatoren zu erinnern, denken Sie daran außen-innen .
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.