Esiste un termine di programmazione che significa proprietà o campo?

5

Penso che questa domanda possa comprendere più lingue, ma in C # in particolare c'è una chiara distinzione tra un campo (ex: private int a; ) e una proprietà (ex : %codice%). Sebbene ci siano spesso buoni motivi per scegliere l'uno o l'altro, in molti casi possono essere usati in modo intercambiabile e hanno lo stesso scopo e la scelta tra di essi è solo una questione di convenzione.

Esiste un termine generico che include entrambi questi concetti distinti? Qualcosa che significa "proprietà o campo" senza dover dire "proprietà o campo"? La parola "variabile" potrebbe funzionare, ma include anche variabili nell'ambito della funzione e non sono nemmeno sicuro se tecnicamente include proprietà.

Voglio una parola che posso usare quando un valore deve essere memorizzato in un costrutto di dati con scope di classe, ma non importa se si tratta di un campo o di una proprietà.

    
posta Kyle Delaney 18.12.2018 - 21:09
fonte

6 risposte

9

No, non c'è, solo il termine "campo" sta descrivendo correttamente quello che stai cercando.

Penso che le proprietà dovrebbero essere viste prima di tutto come funzioni (una sostituzione per le coppie "getter" e "setter"), non come una sostituzione diretta per i campi. Proprietà automatiche (che non facevano parte del linguaggio C # prima della versione 3.0) creano un campo privato invisibile sotto il cofano, ma è ancora un campo in cui viene memorizzato il valore.

Il termine più generale, indipendente dalla lingua, dalla modellazione OO è variabile membro . Puoi usare quello, se preferisci un termine più generico di "campo".

    
risposta data 19.12.2018 - 07:45
fonte
3

[...] in many case they [properties or fields] can be used interchangeably [...] and choosing between them is just a matter of convention.

Non è "solo una questione di convenzione". In pochissimi casi i campi e le proprietà sono intercambiabili. L'unico caso a cui riesco a pensare è quando un public readonly (o un public const ) può essere intercambiabile con una proprietà getter-only.

Incapsulamento del supporto delle proprietà pubbliche. È possibile controllare il nuovo valore nel setter e generare eccezioni quando non è accettabile. I campi pubblici non ti consentono di farlo.

Is there a programming term that means property or field?

Si chiama "proprietà o campo". Abbastanza breve da essere usato così com'è. [Ispirato da questo commento .]

modifica

... o anche più breve. Ecco una frase di esempio in cui verrebbe usato il termine:

"If you store the data in a property or field of your ChildDialog class, you'll be able to access that data in StartAsync." [from O.P.'s comment under another answer]

Funziona anche se rimuovi i dettagli sul modo in cui i dati vengono letti dall'oggetto, la frase mantiene tutto il suo significato e intento. Pertanto, è possibile riscrivere: " Se si memorizzano i dati [o stato] in una classe ChildDialog, sarà possibile accedere a tali dati in StartAsync. " La frase mantiene il suo significato un intento sia i dati sono accessibili tramite una proprietà, o un campo grezzo 1 , o un metodo getter GetData(...) .

1 Non farlo, per favore. Vedi sopra.

    
risposta data 19.12.2018 - 04:28
fonte
2

Ho visto "membro della classe" nei vecchi libri OO. Forse se pubblichi una frase o un paragrafo da quello che stai scrivendo sarà più facile trovare la parola più adatta.

    
risposta data 18.12.2018 - 21:12
fonte
1

In python, che aveva una distinzione simile tra campi e proprietà (sebbene Python non richieda alcuna ricompilazione per passare tra i due), il termine che comprende è solitamente "attributi".

    
risposta data 19.12.2018 - 05:27
fonte
1

While there is often good reason to choose one or the other, in many case they can be used interchangeably and they serve the same purpose and choosing between them is just a matter of convention.

Ho contestato questa affermazione. I campi sono variabili; sono lo stato di un oggetto. Le proprietà sono un meccanismo di incapsulamento. Mentre in alcuni casi di utilizzo semplice possono server lo stesso scopo, la potenza delle proprietà va ben oltre quei semplici casi.

Le proprietà possono essere definite all'interno delle interfacce; possono essere definiti come uno dei tre stati: sola lettura, lettura-scrittura e sola scrittura; quegli stati di lettura e scrittura possono avere diversi livelli di accessibilità; e possono eseguire il codice quando vengono utilizzati. Nessuno di sopra si applica ai campi.

Se si cerca un termine per descrivere campi e proprietà, ma ciò esclude altri membri, si suppone erroneamente che siano equivalenti e quindi meritino un nome comune speciale. Non sono equivalenti e quindi non meritano un nome comune esclusivo

    
risposta data 19.12.2018 - 09:56
fonte
0

Le proprietà non memorizzano i dati, il campo nascosto dietro la proprietà memorizza i dati. Le proprietà forniscono un modo per accedere a quel campo.

A causa della sintassi C #, la distinzione tra una variabile e una proprietà sfuma. Ma le proprietà e i campi sono due animali molto diversi. Una proprietà è più simile a un metodo che a una variabile.

In generale, le proprietà fanno parte dell'interfaccia della classe e i campi fanno parte dello stato della classe. Questa è la cosa bella delle proprietà, puoi cambiare getter e setter e mantenere la stessa rappresentazione esterna della tua classe.

    
risposta data 20.12.2018 - 10:20
fonte

Leggi altre domande sui tag