Junior
Welche Zugriffsspezifizierer gibt es in C#?
sobes.tech KI
Antwort von AI
In C# gibt es die folgenden Zugriffssmodifikatoren:
- public: Der Zugriff ist nicht eingeschränkt. Mitglieder, die als
publicgekennzeichnet sind, sind von überall zugänglich, wo ihr umgebender Typ zugänglich ist. - private: Der Zugriff ist auf den umgebenden Typ beschränkt. Mitglieder, die als
privategekennzeichnet sind, sind nur aus dem Code innerhalb derselben Klasse oder Struktur zugänglich. - protected: Der Zugriff ist auf den umgebenden Typ oder auf von diesem Typ abgeleitete Typen beschränkt. Mitglieder, die als
protectedgekennzeichnet sind, sind innerhalb ihrer Klasse und in abgeleiteten Klassen zugänglich. - internal: Der Zugriff ist auf die aktuelle Assembly (.dll oder .exe) beschränkt. Mitglieder, die als
internalgekennzeichnet sind, sind von überall innerhalb derselben Assembly zugänglich. - protected internal: Der Zugriff ist auf die aktuelle Assembly oder auf von diesem Typ abgeleitete Typen in anderen Assemblies beschränkt. Es ist eine Kombination aus
protectedundinternal. - private protected: Der Zugriff ist auf den umgebenden Typ oder auf von diesem Typ abgeleitete Typen nur innerhalb derselben Assembly beschränkt. Es ist eine Kombination aus
privateundprotected.
// Beispiel für die Verwendung von Zugriffssmodifikatoren
public class MyClass
{
public int PublicField; // Überall zugänglich
private int PrivateField; // Nur innerhalb von MyClass zugänglich
protected int ProtectedField; // Innerhalb von MyClass und in abgeleiteten Klassen zugänglich
internal int InternalField; // Innerhalb der aktuellen Assembly zugänglich
protected internal int ProtectedInternalField; // Innerhalb der aktuellen Assembly ODER in abgeleiteten Klassen zugänglich
private protected int PrivateProtectedField; // Innerhalb von MyClass ODER in abgeleiteten Klassen in dieser Assembly zugänglich
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Fehler - privates Feld ist in der Vererbung nicht zugänglich
ProtectedInternalField = 40; // OK
PrivateProtectedField = 50; // OK
}
}
public class AnotherClassInSameAssembly
{
void AnotherMethod()
{
MyClass mc = new MyClass();
mc.PublicField = 1; // OK
mc.InternalField = 2; // OK
mc.ProtectedInternalField = 3; // OK
// mc.PrivateField = 4; // Fehler
// mc.ProtectedField = 5; // Fehler
// mc.PrivateProtectedField = 6; // Fehler
}
}