2013-05-25 12 views
10

Sto imparando C# e sto imparando a creare campi privati ​​per la classe, e usando Getter e Setter per esporre Metodi invece di valori di campo.Stenografi Accessors and Mutators

sono la get; set; in Metodo 1 e Metodo 2 equivalente? per esempio. è una stenografia dell'altra?

class Student 
{ 
    // Instance fields 
    private string name; 
    private int mark; 

    // Method 1 
    public string Name { get; set; } 

    // Method 2 
    public int Mark 
    { 
     get { return mark; } 
     set { mark = value; } 
    } 
} 

Infine, sarebbe Metodo 2 essere utilizzato quando si vuole, ad esempio eseguire un calcolo prima di ottenere o impostare un valore? per esempio. convertire il valore in percentuale o eseguire la convalida? per esempio.

class Student 
{ 
    // Instance fields 
    private string name; 
    private double mark; 
    private int maxMark = 50; 

    // Method 1 
    public string Name { get; set; } 

    // Method 2 
    public double Mark 
    { 
     get { return mark; } 
     set { if (mark <= maxMark) mark = value/maxMark * 100; } 
    } 
} 
+0

Dai un'occhiata a [questa risposta] (http://stackoverflow.com/questions/15454470/why-arent-simple-properties-optimized-to-fields/15454538#15454538); mostra qualcosa in dettaglio. –

+0

possibile duplicato di [Quali sono le proprietà automatiche in C# e qual è il loro scopo?] (Http://stackoverflow.com/questions/6001917/what-are-automatic-properties-in-c-sharp-and-what-is -il loro scopo) –

risposta

8

Sì, il Metodo 1 è una scorciatoia al Metodo 2. Suggerisco di utilizzare il Metodo 1 per impostazione predefinita. Quando hai bisogno di più funzionalità, usa il Metodo 2. Puoi anche specificare diversi modificatori di accesso per ottenere e impostare.

+1

Aah, quindi intendi che posso fare qualcosa come 'protected set {if (mark <= maxMark) mark = value/maxMark * 100; } '??? – Gravy

+0

Sì, è corretto. – Robin

+2

Si noti che il nome getter/setter non restituirà/imposterà il nome della stringa privata, ma una variabile interna a cui non si ha accesso diretto. – Bikonja

7

Sì, il Method2 è la strada da percorrere quando si dispone di una funzione getter e setter personalizzata. Per impostazione predefinita, quando si utilizza Metodo1, verrà gestita internamente una proprietà privata predefinita. Si prega di fare riferimento a questo URL per ulteriori dettagli