ciao,
cricchi ha scritto:
Per scrittura privata si intende che io sviluppatore non posso creare nuove persone
Se definisci il
costruttore come private, sì. Quando una classe ha un costruttore privato, l'utente non è libero di creare le istanze che vuole usando la parola chiave
new.
L'utente dovrà ottenere un'istanza di quella classe in altri modi, come per esempio attraverso il metodo statico che avevi citato.
Se invece rendi privato il Set di una proprietà, allora sarà solo quella proprietà a non poter essere scritta dall'utente. Riprendiamo l'esempio.
https://dotnetfiddle.net/QnXG3aCome vedi, ho impostato come privato il set di NomeCompleto ed Età. Il costruttore invece è pubblico, e per questo motivo sono stato in grado di ottenere delle istanze di Persona usando la parola chiave
new.
Che utilità ha tutto questo?
Le classi, con i loro membri e loro modificatori (public, private, ecc..) ti mettono in condizione di modellare casi reali.
Considera per esempio il contachilometri di un'automobile. Se l'utente potesse modificare il valore dei chilometri riportandoli a zero, potrebbe rivendere la macchina spacciandola per nuova. Un'automobile non deve consentire che si possa resettare il contachilometri, ma solo leggerlo, in modo che l'utente sappia quando deve fare il tagliando o i controlli periodici.
La classe Automobile modellerà questo caso reale con una proprietà KmPercorsi che ha il Get pubblico e il Set privato.
La stessa cosa capita con l'età delle persone: solo il meccanismo biologico interno della persona ne decreta l'età. Non posso io decidere di avere 18 anni di nuovo.
Ancora una volta, la classe Persona modellerà questo caso reale con una proprietà Età che ha il Get pubblico e il Set privato.
Anche il NomeCompleto va reso privato? Dipende. Se stai scrivendo un'applicazione per l'anagrafe, probabilmente ne consentirai la modifica, ma solo se l'utente fornisce gli adeguati documenti necessari alla procedura. Quindi modificare il nome direttamente non sarà possibile, ma si dovrà usare un apposito metodo che richiede all'utente di fornire tutti i parametri richiesti.
persona.CambiaNome("Nuovo nome", vecchiaCartaIdentità, pagamento, scansioneFirma, dichiarazione)
cricchi ha scritto:
l'avergli dato noi stessi "mario Rossi" è inteso come lettura,non scrittura,giusto?
Indirettamente stiamo
scrivendo quelle proprietà. Dico "indirettamente" perché qui è il costruttore che si occupa di usare l'input che gli diamo come meglio crede.
Fai finta di essere all'anagrafe: l'impiegato ti chiede con che nome vuoi registrare tuo figlio. Quando gli comunichi il nome, non stai propriamente scrivendo sul registro dell'anagrafe, ma ti stai conformando alle richieste dell'impiegato, che a sua volta scrive sul registro.
In questo caso il costruttore è servito a
moderare la scrittura sulla proprietà, un po' come il metodo CambiaNome che vedevamo prima. Se avessi scelto un nome assurdo per tuo figlio, probabilmente l'impiegato non avrebbe creato la nuova voce nel registro ma ti avrebbe chiesto di dare un altro nome (la classe Persona avrebbe modellato questo scenario sollevando un'
eccezione, cioè un errore).
ciao,
Moreno
Modificato da BrightSoul il 08 settembre 2014 19.26 -