PDA

View Full Version : C# - informazione su alcuni comandi


sharkkk
14-02-2015, 17:39
Volevo chiedere dei chiarimenti in merito a questi frammenti di codice c#:

1. public bool Pippo { get; set; }

In questa maniera Pippo è un metodo get/set che prende/ritorna un booleano? Se si praticamente questa dichiarazione permette di risparmiare la scrittura di due metodi (getPippo e setPippo) è corretto?

2. il comando yield a cosa serve?

3. ....ForEach(o => o.Find(Root));

il comando => è come dire per ogni o dell'oggetto ritornato da o.Find(Root)?

4. è possibile avere un esempio dell'utilità dei metodi di tipo delegate (al momento non ne capisco l'utilità)

grazie in anticipo

[Kendall]
14-02-2015, 21:28
1) Quella è una proprietà con ivar automatica. Quello che dici è corretto, e nel c# non andrai mai a scrivere i getter e setter come metodi (come nel Java o nel c++, per fare degli esempi) ma tramite appunto le proprietà. Ci sono parecchie sfaccettature legate alle proprietà in c#, quindi per capirle per bene ti consiglio di spulciare qualche libro o tutorial, perché il tutto non si può relegare a poche righe in un forum.

2) Il discorso non è banale. Lo yeld viene utilizzato per generare un iteratore, da usare in un ciclo foreach o tramite LINQ. Anche qui, stesso consiglio di prima. Guarda la documentazione, spiega molto bene anche questa keyword.

3) Quello non è un "comando". L'espressione dentro alle parentesi tonde, nella sua interezza, è una espressione lambda cioè, in soldoni, un metodo anonimo chiamato anche, in altri linguaggi, closure. La o, in quel caso, rappresenta l'argomento del metodo anonimo, e l'istruzione (o istruzioni se racchiuse tra parentesi graffe) sono il corpo di tale funzione). Il tutto permette di definire in loco una funzione, utile soprattutto quando la funzione ha senso solo o soprattutto nel contesto nella quale viene definita.

4) I delegate sono, facendola semplice, una specie di puntatori a funzioni. In realtà la loro natura è solo assimilabile a questo concetto, ma in realtà vanno ben oltre.
Per cosa sono utili? Beh, ad una serie molto vasta di situazioni. Sono alla base, per esempio, del meccanismo degli eventi del c# (gli eventi sono una forma particolare di delegati). Di base un delegato può "contenere" altri metodi (statici o non) , e cosa decisamente utile anche più di uno (multicasting delegate). Un esempio di impiego dei delegati è proprio il metodo ForEach che hai scritto sopra. Internamente quel metodo memorizza la funzione lambda all'interno di un delegato.
I delegati sono argomenti relativamente avanzati del linguaggio, così come lo yeld e le espressioni lambda. Visto il dubbio iniziale sulle proprietà ipotizzo tu sia agli inizi con il c# quindi, curiosità a parte che è legittima e anzi sempre positiva, ti consiglierei prima di tutto di apprendere per bene le basi.


Inviato dal mio iPad utilizzando Tapatalk