Le variabili del costruttore devono passare direttamente ai campi o alle proprietà private?

StackOverflow https://stackoverflow.com/questions/131517

  •  02-07-2019
  •  | 
  •  

Domanda

Ora questo è .NET ma sono sicuro che il principale dovrebbe applicarsi a tutto il linguaggio OOP, per semplificare prendo .NET come esempio:

R # di solito creatore del creatore e passaggio della variabile in entrata al campo privato, che per me tende a passarlo alla Proprietà.

Qualche opinione su come i diversi e qual è la migliore pratica per questo?

È stato utile?

Soluzione

L'uso delle proprietà è OK fintanto che non sono virtuali / sovrascritte. Le proprietà sono essenzialmente metodi e non è necessario chiamare metodi virtuali all'interno del costruttore poiché il tipo appropriato potrebbe non essere ancora stato creato. Microsoft ha elencato il proprio insieme di linee guida , basta scorrere fino alla in basso per vedere la guida pertinente e lo snippet di codice che illustrano il problema (lo illustrano usando metodi, ma come ho già detto le proprietà .NET sono essenzialmente metodi speciali).

Altri suggerimenti

Il passaggio del parametro tramite il setter proprietà consente di conservare qualsiasi codice di convalida in un solo posto.

Vorrei raccomandare di inviarlo alla Proprietà, piuttosto che direttamente al campo privato, anche se l'implementazione effettiva determinerebbe le condizioni esatte. Ad esempio, a volte ci sono eventi generati quando si utilizza la proprietà e non si desidera generare tali eventi durante il costruttore. O forse vuoi aggirare la logica della Proprietà per qualche altro motivo.

Prestare attenzione utilizzando il Setter proprietà. Nel setter potresti avere del codice che può causare effetti collaterali imprevisti.

Manipolo i campi all'interno del costruttore. I campi rappresentano davvero lo stato intrinseco dell'oggetto e il lavoro di costruzione consiste nell'inizializzare questo stato interno. Le proprietà sono solo a scopo di incapsulamento e fanno parte dell'interfaccia pubblica allo stato dell'oggetto.

La logica di trasformazione che si applica agli argomenti del costruttore o ai valori di input delle proprietà prima di impostare lo stato interno dell'oggetto potrebbe essere molto diversa. Ad ogni modo, se è il caso, ho usato un metodo di trasformazione esplicito chiamato dal setter proprietà e dal costruttore, invece di concatenare direttamente il costruttore sul setter proprietà.

Se non esiste alcuna logica, non riesco a capire perché ti piacerebbe usare il setter proprietà all'interno del costruttore.

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