2009-05-14 10 views
5

Mentre legge l'articolo di Jon Skeet su fields vs properties, egli menziona che cambiare i campi in proprietà è un cambiamento radicale.Cambiare i campi in proprietà è un cambiamento di rottura in quali scenari?

Mi piacerebbe capire gli scenari comuni in cui questo cambiamento può causare interruzioni. Insieme allo scenario, se puoi, fornisci tutti i dettagli.

Per cominciare, i seguenti punti sono stati menzionati altrove:

  • Non è possibile modificare i campi di proprietà se si utilizza riflessione sulla classe. Questo è ovvio anche se non ho dettagli. La serializzazione è uno scenario in cui la riflessione viene utilizzata per iterare sull'oggetto e la modifica dei campi alle proprietà interromperà il serializzatore o modificherà l'output

  • Non è possibile legarsi facilmente ai campi. (Perché è questo? L'ho letto here)

  • ???

EDIT: Robert ha una lista completa delle ragioni per scegliere properties over fields e spiega anche come il passaggio tra di loro può causare un cambiamento di rottura.

risposta

5

Le proprietà possono generare eccezioni arbitrarie, mentre i campi non possono (almeno quando il compilatore conosce l'assegnazione del campo in fase di compilazione).

2

In Windows Form almeno, è possibile solo database come oggetti DataGridViewColumns su oggetti business, non campi. Quindi, se la tua classe fosse utilizzata come DataSource per una griglia, le sue proprietà che cambiano in campi comporterebbero alcuni nuovi bug per il proprietario della griglia.

9

Se si dispone di un campo pubblico e un altro assieme ha il codice che lo sta utilizzando, sarà necessario ricompilarlo.

IOW la definizione di interruzione include "dovrà essere ricompilato".

1

È possibile passare un campo come parametro ref o out o prendere l'indirizzo in un contesto non sicuro, mentre non è possibile farlo con una proprietà.