Πρόσβαση στους τροποποιητές (Specifiers) σε C# με παραδείγματα προγραμμάτων

⚡ Έξυπνη Σύνοψη

Οι τροποποιητές πρόσβασης στη C# είναι λέξεις-κλειδιά που ορίζουν την ορατότητα μιας κλάσης, ιδιότητας ή μεθόδου, περιορίζοντας ποια εξωτερικά προγράμματα μπορούν να τα προσεγγίσουν. Οι κατασκευαστές αρχικοποιούν αυτόματα τις τιμές των πεδίων κάθε φορά που δημιουργείται ένα αντικείμενο της κλάσης.

  • 🔐 Ιδιωτικός τομέας: Ο τροποποιητής ιδιωτικής πρόσβασης περιορίζει ένα μέλος στην ίδια κλάση, εμποδίζοντας την πρόσβαση από οποιοδήποτε εξωτερικό πρόγραμμα.
  • 🌐 Δημόσιο: Ο τροποποιητής δημόσιας πρόσβασης εκθέτει μια ιδιότητα ή μέθοδο σε οποιοδήποτε εξωτερικό πρόγραμμα χωρίς περιορισμούς.
  • Προστατευμένο: Ο τροποποιητής προστατευμένης πρόσβασης μοιράζεται μέλη μόνο με κλάσεις που κληρονομούνται από την τρέχουσα κλάση.
  • 📦 Εσωτερικός: Ο εσωτερικός τροποποιητής πρόσβασης επιτρέπει την πρόσβαση εντός της ίδιας συναρμολόγησης αλλά όχι από εξωτερικό πρόγραμμα.
  • Οικοδόμος: Ένας κατασκευαστής μοιράζεται το όνομα της κλάσης, δεν δέχεται τύπο επιστροφής και αρχικοποιεί πεδία όταν δημιουργείται ένα αντικείμενο.
  • 🤖 Βοήθεια AI: Το GitHub Copilot scaffolds ενσωματώνει τροποποιητές και κατασκευαστές, ενώ το ML.NET αντιστοιχίζει ιδιότητες κλάσης σε χαρακτηριστικά μοντέλου.

Τροποποιητές Πρόσβασης (Προδιαγραφές) σε C#

Τι είναι το Access Modifier (Specifier) ​​στο C#;

Τροποποιητές πρόσβασης ή οι Προσδιοριστές Πρόσβασης (Access Specifiers) στη C# είναι οι λέξεις-κλειδιά που χρησιμοποιούνται για να ορίσουν την ορατότητα μιας ιδιότητας ή μεθόδου κλάσης. Χρησιμοποιούνται όταν δεν θέλετε άλλα προγράμματα να βλέπουν τις ιδιότητες ή τις μεθόδους μιας κλάσης. Οι τροποποιητές πρόσβασης περιορίζουν την πρόσβαση, έτσι ώστε άλλα προγράμματα να μην μπορούν να δουν τις ιδιότητες ή τις μεθόδους μιας κλάσης.

Υπάρχουν 6 τύποι τροποποιητών πρόσβασης στο C#:

  • Private
  • Δημόσιο
  • Προστατευόμενη
  • Εσωτερικός
  • Προστατευμένο εσωτερικό
  • Ιδιωτικό Προστατευμένο

Θα μάθουμε για τους κύριους τροποποιητές πρόσβασης στο C# με παραδείγματα προγραμμάτων όπως εξηγείται παρακάτω.

Τροποποιητές ιδιωτικής πρόσβασης σε C#

Όταν ο τροποποιητής ιδιωτικής πρόσβασης είναι συνδεδεμένος είτε σε μια ιδιότητα είτε σε μια μέθοδο, αυτό σημαίνει ότι δεν είναι δυνατή η πρόσβαση σε αυτά τα μέλη από οποιοδήποτε εξωτερικό πρόγραμμα.

Παράδειγμα τροποποιητή ιδιωτικής πρόσβασης

Ας πάρουμε ένα παράδειγμα και ας δούμε τι συμβαίνει όταν χρησιμοποιούμε τον τροποποιητή ιδιωτικής πρόσβασης.

Ας τροποποιήσουμε τον τρέχοντα κώδικα στο αρχείο Tutorial.cs. Στη μέθοδο SetTutorial, ας αλλάξουμε τη δημόσια λέξη-κλειδί σε ιδιωτική.

Τροποποιητές ιδιωτικής πρόσβασης

Τώρα ας μεταβούμε στο αρχείο Program.cs. Θα παρατηρήσετε ότι υπάρχει μια κόκκινη σαθρή γραμμή κάτω από τη μέθοδο SetTutorial.

Εφόσον έχουμε πλέον δηλώσει τη μέθοδο SetTutorial ως ιδιωτική στην κλάση Tutorial, το Visual Studio το έχει εντοπίσει. Έχει πει στο χρήστη επισημαίνοντάς το ότι τώρα αυτή η μέθοδος δεν θα λειτουργεί από το αρχείο Program.cs.

Τροποποιητής ιδιωτικής πρόσβασης

Τροποποιητές δημόσιας πρόσβασης C#

Όταν ο τροποποιητής δημόσιας πρόσβασης είναι συνδεδεμένος είτε σε μια ιδιότητα είτε σε μια μέθοδο, σημαίνει ότι αυτά τα μέλη μπορούν να έχουν πρόσβαση από οποιοδήποτε εξωτερικό πρόγραμμα. Το έχουμε ήδη δει στα προηγούμενα παραδείγματα μας.

Παράδειγμα Τροποποιητή Δημόσιας Πρόσβασης

Τροποποιητές δημόσιας πρόσβασης C#

Εφόσον έχουμε ορίσει τις μεθόδους μας ως δημόσιες στην κλάση Tutorial, είναι δυνατή η πρόσβαση σε αυτές από το αρχείο Program.cs.

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

Όταν ο τροποποιητής προστατευμένης πρόσβασης είναι συνδεδεμένος είτε σε μια ιδιότητα είτε σε μια μέθοδο, αυτό σημαίνει ότι αυτά τα μέλη μπορούν να έχουν πρόσβαση μόνο από κλάσεις που κληρονομήθηκαν από το ρεύμα τάξη. Αυτό θα εξηγηθεί με περισσότερες λεπτομέρειες στην κλάση Inheritance.

Τροποποιητές εσωτερικής πρόσβασης C#

Όταν ένας τροποποιητής εσωτερικής πρόσβασης είναι συνδεδεμένος είτε σε μια ιδιότητα είτε σε μια μέθοδο, αυτά τα μέλη μπορούν να έχουν πρόσβαση μόνο από ένα εσωτερικό πρόγραμμα αλλά όχι από ένα εξωτερικό πρόγραμμα.

Κατασκευαστής C#

C# Οι κατασκευαστές χρησιμοποιούνται για την προετοιμασία των τιμών των πεδίων κλάσεων όταν δημιουργούνται τα αντίστοιχα αντικείμενα τους. Ένας κατασκευαστής είναι μια μέθοδος που έχει το ίδιο όνομα με αυτό της κλάσης. Εάν ένας κατασκευαστής ορίζεται σε μια κλάση, τότε θα παρέχει την πρώτη μέθοδο που καλείται όταν δημιουργείται ένα αντικείμενο. Ας υποθέσουμε ότι είχαμε μια τάξη που λέγεται Υπάλληλος. Η μέθοδος κατασκευής θα ονομαζόταν επίσης Employee().

Τα ακόλουθα βασικά πράγματα πρέπει να σημειωθούν σχετικά με τις μεθόδους κατασκευής

  1. Ο προεπιλεγμένος τροποποιητής πρόσβασης C# για τον κατασκευαστή πρέπει να γίνει δημόσιος.
  2. Δεν πρέπει να υπάρχει τύπος επιστροφής για τη μέθοδο κατασκευής.

Παράδειγμα C# Constructor

Ας δούμε τώρα πώς μπορούμε να ενσωματώσουμε τον χρήστη των κατασκευαστών στον κώδικά μας. Θα χρησιμοποιήσουμε κατασκευαστές για να αρχικοποιήσουμε τα πεδία TutorialID και TutorialName σε ορισμένες προεπιλεγμένες τιμές όταν δημιουργείται το αντικείμενο.

Βήμα 1) Το πρώτο βήμα είναι να δημιουργήσουμε τον κατασκευαστή για την τάξη Tutorial. Σε αυτό το βήμα, προσθέτουμε τον παρακάτω κώδικα στο αρχείο Tutorial.cs.

Κατασκευαστής C#

Code Εξήγηση:-

  1. Προσθέτουμε πρώτα μια νέα μέθοδο που έχει το ίδιο όνομα με αυτό της κλάσης. Επειδή είναι το ίδιο όνομα με την κλάση, η C# το αντιμετωπίζει ως μέθοδο κατασκευής. Έτσι τώρα κάθε φορά που η μέθοδος κλήσης δημιουργεί ένα αντικείμενο αυτής της κλάσης, αυτή η μέθοδος θα καλείται από προεπιλογή.
  2. Στον κατασκευαστή Tutorial, ορίζουμε την τιμή του TutorialID σε 0 και το TutorialName σε "Προεπιλογή". Έτσι, κάθε φορά που δημιουργείται ένα αντικείμενο, αυτά τα πεδία θα έχουν πάντα αυτές τις προεπιλεγμένες τιμές.

Τώρα ας μεταβούμε στο αρχείο Program.cs και απλώς αφαιρούμε τη γραμμή, η οποία καλεί τη μέθοδο SetTutorial. Αυτό συμβαίνει επειδή θέλουμε απλώς να δούμε πώς λειτουργεί ο κατασκευαστής.

Κατασκευαστής C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public Tutorial()
  {
   TutorialID=0;
   TutorialName="Default";
  }
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Εξήγηση:-

  1. Το πρώτο βήμα είναι να δημιουργήσετε ένα αντικείμενο για την κλάση Tutorial. Αυτό γίνεται μέσω της λέξης κλειδιού «νέα».
  2. Χρησιμοποιούμε τη μέθοδο GetTutorial της τάξης Tutorial για να λάβουμε το TutorialName. Στη συνέχεια εμφανίζεται στην κονσόλα μέσω της μεθόδου Console.WriteLine.

Εάν ο παραπάνω κωδικός εισαχθεί σωστά και το πρόγραμμα εκτελεστεί, θα εμφανιστεί η ακόλουθη έξοδος.

Παραγωγή:

Κατασκευαστής C#

Από την έξοδο, μπορούμε να δούμε ότι ο κατασκευαστής είχε όντως κληθεί και ότι η τιμή του TutorialName ορίστηκε σε "Προεπιλογή".

Σημείωση: Εδώ η τιμή "προεπιλογή" λαμβάνεται από τον κατασκευαστή.

Συχνές Ερωτήσεις

Εάν δεν καθοριστεί τροποποιητής, τα μέλη της κλάσης και της δομής ορίζονται από προεπιλογή σε ιδιωτικά και τα μέλη ανώτατου επιπέδου σε εσωτερικά, παραμένοντας κρυφά μέχρι να διευρύνετε την ορατότητά τους.

Η επιλογή Protected (Προστατευμένη) εκθέτει ένα μέλος στην ίδια κλάση και σε οποιαδήποτε παράγωγη κλάση, ακόμη και σε διαφορετικά assembly (συγκροτήματα). Η επιλογή Internal (Εσωτερική) το εκθέτει μόνο σε τύπους στην ίδια assembly (συγκρότηση).

Η ρύθμιση Protected internal επιτρέπει την πρόσβαση από την ίδια assembly ή από οποιαδήποτε παράγωγη κλάση. Η ρύθμιση Private protected είναι πιο αυστηρή, επιτρέποντας μόνο παράγωγες κλάσεις εντός της ίδιας assembly.

Η C# υποστηρίζει προεπιλεγμένους, παραμετροποιημένους, αντιγραφόμενους, στατικούς και ιδιωτικούς κατασκευαστές. Αρχικοποιούν τα πεδία ενός αντικειμένου, εκτελούν την εγκατάσταση κλάσης μία φορά ή κλωνοποιούν τις τιμές ενός άλλου αντικειμένου.

Ένας στατικός κατασκευαστής δεν δέχεται τροποποιητές ή παραμέτρους. Εκτελείται μία φορά, πριν δημιουργηθεί το πρώτο αντικείμενο ή φορτωθούν τα στατικά μέλη, αρχικοποιώντας τα στατικά πεδία.

Ναι. Μια κλάση μπορεί να ορίσει αρκετούς κατασκευαστές με διαφορετικές λίστες παραμέτρων. Ο μεταγλωττιστής επιλέγει αυτόν που ταιριάζει με τα ορίσματα που περνούν στην εντολή new.

Ναι. Το GitHub Copilot προτείνει τροποποιητές, κατασκευαστές και αρχικοποιητές πεδίων από ένα όνομα κλάσης ή σχόλιο μέσα στο Visual Studio και VS Code. RevΔείτε κάθε προτεινόμενο επίπεδο ορατότητας.

Το ML.NET αντιστοιχίζει τις δημόσιες ιδιότητες μιας κλάσης δεδομένων C# για να μοντελοποιήσει χαρακτηριστικά και ετικέτες. Οι δημόσιοι getters και setters το επιτρέπουν να διαβάζει αυτές τις τιμές κατά την εκπαίδευση.

Συνοψίστε αυτήν την ανάρτηση με: