Hai Techies,C#: Creazione delegato multicast con tipo di ritorno booleano
in C#, come possiamo definire il delegato multicast che accetta un oggetto DateTime e restituire un valore booleano.
Grazie
Hai Techies,C#: Creazione delegato multicast con tipo di ritorno booleano
in C#, come possiamo definire il delegato multicast che accetta un oggetto DateTime e restituire un valore booleano.
Grazie
public delegate bool Foo(DateTime timestamp);
Questo è come dichiarare un delegato con la firma che descrivi. Tutti i delegati sono potenzialmente multicast, richiedono semplicemente l'inizializzazione. Come ad esempio:
public bool IsGreaterThanNow(DateTime timestamp)
{
return DateTime.Now < timestamp;
}
public bool IsLessThanNow(DateTime timestamp)
{
return DateTime.Now > timestamp;
}
Foo f1 = IsGreaterThanNow;
Foo f2 = IsLessThanNow;
Foo fAll = f1 + f2;
Calling fAll
, in questo caso sarebbe chiamare sia IsGreaterThanNow()
e IsLessThanNow()
.
Ciò che non funziona è l'accesso a ciascun valore restituito. Tutto ciò che ottieni è l'ultimo valore restituito. Se si desidera recuperare tutti e di ogni valore, dovrete gestire manualmente il multicasting in questo modo:
List<bool> returnValues = new List<bool>();
foreach(Foo f in fAll.GetInvocationList())
{
returnValues.Add(f(timestamp));
}
class Test
{
public delegate bool Sample(DateTime dt);
static void Main()
{
Sample j = A;
j += B;
j(DateTime.Now);
}
static bool A(DateTime d)
{
Console.WriteLine(d);
return true;
}
static bool B(DateTime d)
{
Console.WriteLine(d);
return true;
}
}
Qualunque delegato può essere un delegato multicast
delegate bool myDel(DateTime s);
myDel s = someFunc;
s += someOtherFunc;
Una proprietà utile delega oggetti è che possono essere assegnati ad uno delegato istanza per essere multicast utilizzando l'operatore +. Un delegato composto chiama i due delegati da cui è stato composto . Solo i delegati di possono essere composti dallo stesso tipo.
EDIT: Un delagate ha un metodo GetInvocationList che restituisce un elenco con i metodi associati.
Ecco un riferimento su Delegate invocation
foreach(myDel d in s.GetInvocationList())
{
d();
}
stavo inciampo sullo stesso problema. Ho cercato e trovato questo in msdn.
http://msdn.microsoft.com/en-us/library/2e08f6yc(v=VS.100).aspx
Ci sono due metodi su delegati
Il link descrive questi in dettaglio, con esempi di codice.
È possibile collegare questi metodi per gestire i valori di ritorno dei delegati.
Cosa succede ai valori di ritorno di un delegato composto quando lo si invoca? C'è una sorta di array che ti permette di ispezionare i valori di ritorno dopo che sono stati chiamati? Ho usato delegati multicast in precedenza, ma non ho mai pensato che avessero un tipo di ritorno. – AaronLS