Γρήγορη δημιουργία ιδιοτήτων C# από ​​μεταβλητές

Γρήγορη δημιουργία ιδιοτήτων C# από ​​μεταβλητές

Κάντε δεξί κλικ στη δήλωση πεδίου, μενού Refactor -> Encapsulate field και πηγαίνετε από

int n;

προς

int n;

public int N
{
   get { return n; }
   set { n = value; }
}

Εάν χρησιμοποιείτε C# 3.0 ή νεότερη έκδοση (VisualStudio 2008, ουσιαστικά), μπορείτε να χρησιμοποιήσετε αυτόματες ιδιότητες. Αν και αυτό δεν είναι ακριβώς αυτό που ζητάτε, θα πρέπει (ελπίζουμε) να κάνει το κόλπο.

Αντί να γράφω:

private string m_Name;

public string Name
{
    get { return m_Name; }
    set { m_Name = value; }
}

Μπορείτε απλώς να γράψετε:

public string Name { get; set; }

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

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


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

Εάν απλά δεν θέλετε να γράψετε προσαρμοσμένες ιδιότητες με υποστήριξη πεδίου, μπορείτε να χρησιμοποιήσετε αυτόματες ιδιότητες, για παράδειγμα fpor, όπως:

public string MyProperty { get; set; } // generates an auto-property

που ισοδυναμεί με:

private string m_MyProperty;
public string MyProperty 
{ 
  get { return m_MyProperty; }
  set { m_MyProperty = value; }
}

Μπορείτε ακόμη και να κάνετε διαφορά στην προσβασιμότητα του ρυθμιστή και του λήπτη:

public string MyProperty { get; private set; }

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