In C #, hai campi e hai anche proprietà, che sono fondamentalmente campi incapsulati. Le proprietà sono comunemente implementate usando i campi (e la lingua ha una scorciatoia per farlo succintamente), ma non è necessario.
Quindi, puoi scrivere entrambi:
o.Field = 42;
o.Property = 42;
Ma quest'ultimo in realtà compila per una chiamata a un metodo setter:
o.set_Property(42);
Un'altra differenza tra campi e proprietà è che le proprietà non consentono alcune operazioni, come l'utilizzo di ref
.
È simile a delegati ed eventi: gli eventi sono campi delegati incapsulati. Gli eventi vengono comunemente implementati utilizzando i campi delegati (e la lingua ha una scorciatoia per farlo in modo succinto), ma non è necessario.
Inoltre, puoi scrivere entrambi:
o.DelegateField += Handler;
o.Event += Handler;
Ma quest'ultimo in realtà si compila in una chiamata a un metodo di aggiunta:
o.add_Event(Handler);
Un'altra differenza è che gli eventi non ti consentono la maggior parte delle operazioni, come l'assegnazione o il richiamo di esse (ad eccezione del richiamo di eventi di tipo campo dalla stessa classe dichiarante).
Quindi, ora la domanda è: perché puoi usare +=
con i campi delegati? È perché puoi utilizzare +
per combinare i delegati. Ciò significa che o.DelegateField += Handler;
è solo una scorciatoia per o.DelegateField = o.DelegateField + Handler;
.
Con gli eventi, non puoi leggere o assegnarli a loro, quindi la sintassi di +=
di stenografia è l'unica opzione.