Sobes.tech
Junior

Ποια είναι οι τροποποιητές πρόσβασης σε C#;

sobes.tech AI

Απάντηση από AI

Στη γλώσσα C#, υπάρχουν οι ακόλουθοι τροποποιητές πρόσβασης:

  1. public: Η πρόσβαση δεν περιορίζεται. Τα μέλη που σημειώνονται ως public είναι προσβάσιμα από οπουδήποτε όπου είναι προσβάσιμος ο περιέχων τύπος τους.
  2. private: Η πρόσβαση περιορίζεται στον περιέχοντα τύπο τους. Τα μέλη που σημειώνονται ως private είναι προσβάσιμα μόνο από τον κώδικα εντός της ίδιας κλάσης ή δομής.
  3. protected: Η πρόσβαση περιορίζεται στον τύπο που τα περιέχει ή σε τύπους που κληρονομούν από αυτόν. Τα μέλη που σημειώνονται ως protected είναι προσβάσιμα εντός της κλάσης και στις κλάσεις που κληρονομούν.
  4. internal: Η πρόσβαση περιορίζεται στην τρέχουσα συλλογή (.dll ή .exe). Τα μέλη που σημειώνονται ως internal είναι προσβάσιμα από οπουδήποτε εντός της ίδιας συλλογής.
  5. protected internal: Η πρόσβαση περιορίζεται στην τρέχουσα συλλογή ή σε τύπους που κληρονομούν από τον περιέχοντα τύπο σε άλλες συλλογές. Είναι ένας συνδυασμός των protected και internal.
  6. private protected: Η πρόσβαση περιορίζεται στον τύπο που τα περιέχει ή σε τύπους που κληρονομούν από αυτόν μόνο εντός της ίδιας συλλογής. Είναι ένας συνδυασμός των private και protected.
// Παράδειγμα χρήσης τροποποιητών πρόσβασης
public class MyClass
{
    public int PublicField;        // Προσβάσιμο από οπουδήποτε
    private int PrivateField;      // Μόνο εντός της MyClass
    protected int ProtectedField;  // Προσβάσιμο εντός της MyClass και στις κλάσεις που κληρονομούν
    internal int InternalField;    // Προσβάσιμο εντός της τρέχουσας συλλογής
    protected internal int ProtectedInternalField; // Προσβάσιμο εντός της τρέχουσας συλλογής Ή στις κλάσεις που κληρονομούν
    private protected int PrivateProtectedField; // Προσβάσιμο εντός της MyClass Ή στις κλάσεις που κληρονομούν στην ίδια συλλογή

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Σφάλμα - ιδιωτικό πεδίο δεν προσβάσιμο στην κληρονομικότητα
        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; // Σφάλμα
        // mc.ProtectedField = 5; // Σφάλμα
        // mc.PrivateProtectedField = 6; // Σφάλμα
    }
}