Junior
Ποια είναι οι τροποποιητές πρόσβασης σε C#;
sobes.tech AI
Απάντηση από AI
Στη γλώσσα C#, υπάρχουν οι ακόλουθοι τροποποιητές πρόσβασης:
- public: Η πρόσβαση δεν περιορίζεται. Τα μέλη που σημειώνονται ως
publicείναι προσβάσιμα από οπουδήποτε όπου είναι προσβάσιμος ο περιέχων τύπος τους. - private: Η πρόσβαση περιορίζεται στον περιέχοντα τύπο τους. Τα μέλη που σημειώνονται ως
privateείναι προσβάσιμα μόνο από τον κώδικα εντός της ίδιας κλάσης ή δομής. - protected: Η πρόσβαση περιορίζεται στον τύπο που τα περιέχει ή σε τύπους που κληρονομούν από αυτόν. Τα μέλη που σημειώνονται ως
protectedείναι προσβάσιμα εντός της κλάσης και στις κλάσεις που κληρονομούν. - internal: Η πρόσβαση περιορίζεται στην τρέχουσα συλλογή (.dll ή .exe). Τα μέλη που σημειώνονται ως
internalείναι προσβάσιμα από οπουδήποτε εντός της ίδιας συλλογής. - protected internal: Η πρόσβαση περιορίζεται στην τρέχουσα συλλογή ή σε τύπους που κληρονομούν από τον περιέχοντα τύπο σε άλλες συλλογές. Είναι ένας συνδυασμός των
protectedκαιinternal. - 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; // Σφάλμα
}
}