Riferimento public exposed property o private field in altre parti di una classe [duplicate]

1

Ho una proprietà pubblica con un get e set accessor. Associato a questa proprietà è un campo privato.

È consigliabile fare riferimento a questi valori in altre parti di un codice di classi per utilizzare il campo privato o la proprietà pubblica esposta. Sebbene io abbia rilasciato ho creato un campo bool privato personFieldSpecified quando probabilmente non ne avevo bisogno, l'ho fatto per spiegare meglio la mia domanda.

        private SimplePerson personField;
        private bool personFieldSpecified;

        public SimplePerson Person
        {
            get
            {
                if (personField == null)
                    personField = new SimplePerson();

                return personField;
            }

            set
            {
                personField = value;

                // Q)  Should I access the public property here or the private field
                PersonSpecified = true;
            }
        }

        public bool PersonSpecified
        {
            get
            {
                return personFieldSpecified;
            }

            set
            {
                personFieldSpecified = value;
            }
        }

Poiché sono consapevole dell'implementazione interna del set so che influirà sul risultato finale se lo imposto, tuttavia mi chiedo quale sia la migliore pratica da fare per la manutenzione a lungo termine. Questo potrebbe valere anche per i metodi della mia classe!

Quali sarebbero le ragioni per scegliere un metodo particolare rispetto all'altro. Dipende da cosa sta facendo la proprietà stessa, nel qual caso devo avere conoscenza del suo funzionamento interno o si tratta di progettare?

    
posta dreza 12.03.2012 - 22:45
fonte

1 risposta

2

Se esiste una proprietà per un campo, ti consiglio di utilizzarla sempre per accedere alla proprietà anche all'interno della classe. Ciò ti aiuterà a prevenire l'introduzione di bug in futuro se aggiungerai altre logiche nel getter o setter della proprietà che poi bypasserai se accedi direttamente al campo.

La regola che seguo è se esiste una proprietà per un campo, accedere solo al campo dal costrutto- re della classe o dalla proprietà. Mi spingerei fino al punto di aggiungere un setter privato per garantire che qualsiasi logica di "set" sia ancora incapsulata contro ulteriori cambiamenti.

L'unica volta in cui andare contro è se hai un campo che non è esposto all'esterno della classe (ad esempio un campo bool per determinare se la classe è stata eliminata).

    
risposta data 12.03.2012 - 23:36
fonte

Leggi altre domande sui tag