Sobes.tech
Junior

Welche Zugriffsspezifizierer gibt es in C#?

sobes.tech KI

Antwort von AI

In C# gibt es die folgenden Zugriffssmodifikatoren:

  1. public: Der Zugriff ist nicht eingeschränkt. Mitglieder, die als public gekennzeichnet sind, sind von überall zugänglich, wo ihr umgebender Typ zugänglich ist.
  2. private: Der Zugriff ist auf den umgebenden Typ beschränkt. Mitglieder, die als private gekennzeichnet sind, sind nur aus dem Code innerhalb derselben Klasse oder Struktur zugänglich.
  3. protected: Der Zugriff ist auf den umgebenden Typ oder auf von diesem Typ abgeleitete Typen beschränkt. Mitglieder, die als protected gekennzeichnet sind, sind innerhalb ihrer Klasse und in abgeleiteten Klassen zugänglich.
  4. internal: Der Zugriff ist auf die aktuelle Assembly (.dll oder .exe) beschränkt. Mitglieder, die als internal gekennzeichnet sind, sind von überall innerhalb derselben Assembly zugänglich.
  5. 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 protected und internal.
  6. 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 private und protected.
// 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
    }
}