Domanda

Se ho una configurazione semplice classe come questa:

class MyClass
{
    private string _myName = string.Empty;

    public string MyName
    {
        get
        {
            return _myName;
        }
    }

    public void DoSomething()
    {
        // Get the name...
        string name = string.Empty;

        name = _myName;

        // OR

        name = MyName;

        // ...and do something with it...
    }
}

Quale dovrei usare, la proprietà pubblica, o il membro di dati?

Ovviamente, in questo esempio non fa differenza, poiché entrambi appena riferimento alla stessa variabile. Ma che dire del mondo reale utilizza di proprietà pubbliche?

In generale, non Proprietà pubbliche comportano molto poco, nel qual caso è OK per chiamarli? O la gente mettere un sacco di funzionalità in loro proprietà pubbliche che non deve essere chiamato da riferimenti alle classi interne?

Ho visto qualcosa in un altro post di non mettere un sacco di funzionalità in proprietà, in quanto esaminarli nel Debugger in grado di eseguire risultati imprevisti. È vero?

È stato utile?

Soluzione

Utilizzare la proprietà - una logica che può essere incapsulata all'interno dei setter e getter dovrebbe applicare, anche all'interno della classe stessa. Se non v'è alcuna logica nei getter e setter non è ancora sicuro da usare i campi stessi, perché se in qualsiasi momento si desidera aggiungere la logica dietro l'accesso a quei campi si dovrà refactoring molto di più.

Altri suggerimenti

Credo che si dovrebbe fare riferimento alla proprietà come una pratica generale. Mentre in questo particolare esempio in realtà non fa molta differenza, i / set di accesso get offrono la possibilità di fare un po 'più di lavoro quando si afferra una proprietà. Per esempio, molti di nostra proprietà "Get" di accesso eseguire alcuni di ricerca all'interno di una struttura dati più complessa o impostare valori di default se non è stato definito. In modo che il resto della classe può trarre vantaggio da questa logica, facciamo l'abitudine di utilizzare le proprietà. Solo così non dobbiamo pensare troppo a questo proposito, cerchiamo di generalizzare la pratica.

Ci possono essere casi in cui vogliamo accedere direttamente al membro di dati sottostanti, ma che poi è una decisione consapevole, con un motivo specifico e tende ad essere l'eccezione.

Io preferisco proprietà perché facilmente gestire le situazioni di sola lettura ed è facile per avvolgerli con qualsiasi convalida di base potrebbe essere necessario fare.

Se sto solo restituendo il valore della variabile interna, io faccio il pubblico variabile - non c'è nulla di male a farlo. Ho sempre usato Proprietà pubbliche quando voglio fare qualcosa in risposta a uno di una visione o un cambiamento del valore - cioè, scrivere in un database, impostare anche qualcos'altro (come nella seconda parte del tuo esempio) <. / p>

La domanda che bisogna porsi è se si desidera ciò che accade all'interno della vostra classe per attivare questi eventi. Se lo fai, allo stesso modo un chiamante esterno sarebbe, quindi accedere ai valori tramite la proprietà. Se si desidera solo per leggere il valore, utilizzare la variabile interna.

Per rispondere alla tua domanda, non c'è nulla di male a farlo in entrambi i casi -. Giusta considerazione dei potenziali effetti collaterali

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top