Ho cercato di capire i delegati di C # utilizzando Pro C # 5 .
In breve, l'autore descrive la motivazione per i delegati come un modo strutturato di trattare i puntatori di funzione e le richiamate o la comunicazione bidirezionale tra gli oggetti.
La parte che trovo confusa è la sintassi / implementazione per questo:
-
Da un lato, un oggetto di tipo delegato è visto come gestore o il responsabile per invocare un metodo o un elenco di metodi. A tal fine, ha metodi come
Invoke()
ecc. -
D'altra parte, il tipo delegato viene usato come un "wrapper" con per passare i metodi.
Ad esempio, mi sembra strano che una chiamata al GetInvocationList()
di un delegato restituisca un array di delegati. Non dovrebbe esserci qualcos'altro con cui avvolgere i metodi?
Mi aspettavo che ci fosse qualche altro costrutto / tipo, ad esempio MethodContainer
che avvolge i metodi. Quindi la sintassi per l'aggiunta di metodi a un delegato sarebbe
class MyClass{ void Method(string s){} }
MyClass c = new MyClass();
MethodContainer container = new MethodContainer(c.Method);
delegate void MyDelegate(string s);
MyDelegate d = new MyDelegate();
d.Add(container);
d.GetInvocationList(); // returns array of MethodContainer