Se faccio un membro della classe privato, e poi voglio accedere a quel membro, dobbiamo definire una proprietà pubblica per quel membro. Ma poi mi chiedo: se possiamo usare pubblicamente il membro della classe dichiarandone una proprietà pubblica, allora perché non definiamo semplicemente il membro della classe come pubblico?Perché utilizzare le proprietà pubbliche per i campi privati in C#?
risposta
Perché è possibile convalidare il valore specificato in una proprietà.
Questo non è davvero un argomento perché se in seguito trovi la necessità di farlo, puoi * ancora * introdurre la proprietà allora. – Timwi
@Timwi, penso che la modifica di un membro in una proprietà costringa il codice che utilizza il tipo all'interno di un dll per ricompilare. Anche se questo non è un problema per la maggior parte delle persone, se stai distribuendo i file .dll per il consumo di terze parti, questo dovrebbe essere evitato. – tster
Sì, ma come lei stesso ha sottolineato, si applica solo alle biblioteche. La tua risposta non lo dice. – Timwi
Gli accessor delle proprietà (get, set methods) consentono di modificare l'implementazione in futuro. Ad esempio, è possibile iniziare con un campo di supporto (membro di classe privato), ma in seguito la proprietà potrebbe diventare un risultato di alcuni calcoli. Inoltre, la sintassi delle proprietà ti consente di avere membri di sola lettura, in modo che tu possa modificare il valore solo all'interno della tua classe, mentre il mondo esterno può solo leggerlo.
Questo argomento spiega le proprietà di sola lettura, ma non quelle di lettura/scrittura. Se in seguito trovi la necessità di una proprietà perché si trasforma in un valore calcolato, puoi comunque introdurre la proprietà. – Timwi
Microsoft consiglia l'uso di proprietà pubbliche al posto di campi pubblici per ragioni di compatibilità binaria . Questo è solo un problema se stai scrivendo una libreria (a cui potranno accedere altri programmi).
In sostanza, immaginare questo scenario:
- Si crea una biblioteca con un campo pubblica
- Qualcun altro scrive un programma che utilizza la libreria e accede quel campo pubblico
- ora vuoi cambia il tuo campo in una proprietà pubblica perché devi convalidare il valore di input, oppure la proprietà è diventata il risultato di un calcolo o vuoi che generino eccezioni perché è obsoleta o altro.
- L'utente tenta di aggiornare la libreria, ma non il programma che utilizza la libreria.
Questo interromperà completamente il programma: smetterà di funzionare e si arresta solo in modo anomalo. Tuttavia, se al posto del campo avessi una proprietà pubblica fin dall'inizio, potresti scambiare la libreria.
Questo è, ovviamente, rilevante solo per le biblioteche. In tutti gli altri casi, il consiglio non è molto pertinente e puoi usare i campi se lo desideri. Se successivamente trovi che hai bisogno di una proprietà, puoi comunque cambiarla in una proprietà e il tuo programma verrà comunque compilato correttamente.
Spiegazione molto bella. – Hari
Ecco alcuni motivi del perché utilizziamo proprietà pubbliche anziché campi pubblici.
- È possibile scrivere i codici più complessi in metodi get/set, mentre c'è solo un singolo valore nei campi.
- Proprietà rende il codice più "OO". Dì una classe chiamata Persona, noi possiamo facilmente intuire che esiste una proprietà chiamata "Nome" al suo interno. Ma un campo pubblico denominato "Nome" è in realtà strano.
- Alcuni attributi funzionano solo per le proprietà (AttributeTargets.Property).
Il motivo dell'utilizzo delle proprietà è molto semplice. Puoi sempre modificare la gestione del codice ottenendo/impostando il suo valore senza interrompere alcun programma esterno a seconda del tuo lavoro, questo non è possibile con i campi.Inoltre, le proprietà possono essere contrassegnate come virtuali e, quindi, possono essere ridefinite dalle classi figlie, sempre senza compromettere la compatibilità.
- 1. Perché preferire le proprietà alle variabili pubbliche?
- 2. Avere proprietà pubbliche in classe C++
- 3. Perché non possiamo utilizzare i campi pubblici per l'associazione dei dati in C#?
- 4. Convenzione di denominazione delle campi privati
- 5. Non utilizzare mai le enumerazioni nidificate pubbliche?
- 6. Quando all'interno di una classe, è meglio chiamare i suoi membri privati o le sue proprietà pubbliche?
- 7. Come leggere e impostare campi privati senza un calo delle prestazioni in C#?
- 8. Accesso ai campi privati
- 9. Json.NET Serializzare i membri privati e non le proprietà di sola lettura
- 10. C# winform: accesso alle proprietà pubbliche da altre forme e differenze tra proprietà statiche e pubbliche
- 11. Le visibilità "protette" e "pubbliche" sono inutili per i campi di classe?
- 12. Perché è consentito accedere ai campi privati Java tramite riflessione?
- 13. Metodi e campi privati
- 14. Qualche motivo per utilizzare le proprietà autoattive rispetto alle proprietà implementate manualmente?
- 15. Nascondere i campi dal debugger
- 16. Perché i campi pubblici sono più veloci delle proprietà?
- 17. Fa alcuna differenza, usando le slots pubbliche invece degli slot privati in Qt?
- 18. Posso inizializzare le proprietà pubbliche di una classe utilizzando un tipo diverso in C#?
- 19. Refactor C# proprietà automatiche per campi e proprietà getter/setter?
- 20. Perché utilizzare i vincoli generici in C#
- 21. Perché i metodi "privati" nell'oggetto orientato?
- 22. Perché utilizzare le intestazioni precompilate (C/C++)?
- 23. Qual è la migliore pratica per le API pubbliche C++?
- 24. Perché definire membri privati sotto membri pubblici in C++?
- 25. ABPeoplePickerNavigationController - rimuove il pulsante "Annulla" senza utilizzare metodi/proprietà privati?
- 26. come specificare jackson per utilizzare solo i campi, preferibilmente globalmente
- 27. i membri della classe VB.NET pubbliche per default
- 28. Incapsulamento dei dati in C# utilizzando le proprietà
- 29. come utilizzare Net :: SSH :: Perl con le chiavi pubbliche?
- 30. Utilizzare le proprietà C# nel codice C++ non gestito
cosa stai chiedendo? Quella (singola frase) è indecifrabile. – tster
L'ho modificato pesantemente. Penso che questo sia ciò che intendeva. – Timwi
Penso che l'ultima frase "... come privato in primo luogo" dovrebbe essere cambiata in "... come pubblico all'inizio". –