Sobes.tech
Junior

Welke toegangsmodifiers zijn er in C#?

sobes.tech AI

Antwoord van AI

In C# bestaan de volgende toegangsmodifiers:

  1. public: Toegang is niet beperkt. Leden gemarkeerd als public zijn toegankelijk vanaf elke plek waar hun omringende type toegankelijk is.
  2. private: Toegang is beperkt tot hun omringende type. Leden gemarkeerd als private zijn alleen toegankelijk vanuit de code binnen dezelfde klasse of structuur.
  3. protected: Toegang is beperkt tot het omringende type of de afgeleide types daarvan. Leden gemarkeerd als protected zijn toegankelijk binnen hun klasse en in afgeleide klassen.
  4. internal: Toegang is beperkt tot de huidige assembly (.dll of .exe). Leden gemarkeerd als internal zijn toegankelijk vanaf elke plek binnen dezelfde assembly.
  5. protected internal: Toegang is beperkt tot de huidige assembly of de afgeleide types van het omringende type in andere assemblies. Dit is een combinatie van protected en internal.
  6. private protected: Toegang is beperkt tot het omringende type of de afgeleide types daarvan alleen binnen dezelfde assembly. Dit is een combinatie van private en protected.
// Voorbeeld van gebruik van toegangsmodifiers
public class MyClass
{
    public int PublicField;        // Toegankelijk vanaf elke plek
    private int PrivateField;      // Alleen toegankelijk binnen MyClass
    protected int ProtectedField;  // Toegankelijk binnen MyClass en in afgeleide klassen
    internal int InternalField;    // Toegankelijk binnen de huidige assembly
    protected internal int ProtectedInternalField; // Toegankelijk binnen de huidige assembly OF in afgeleide klassen
    private protected int PrivateProtectedField; // Toegankelijk binnen MyClass OF in afgeleide klassen in dezelfde assembly

    void MyMethod()
    {
        PrivateField = 10; // OK
    }
}

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Fout - privéveld is niet toegankelijk in erfenis
        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; // Fout
        // mc.ProtectedField = 5; // Fout
        // mc.PrivateProtectedField = 6; // Fout
    }
}