Componente delegados multicast em c # - devo usar operadores ou Action.Combine?
Lendo a documentação, vejo que+
operador pode ser usado para compor / combinar delegados do mesmo tipo.
Da mesma forma, eu posso ver que eu posso remover um do delegado composto usando o-
operador.
Eu também notei que oAction
tipo tem estáticaCombine
eRemove
métodos que podem ser usados para concatenar as listas de invocação de dois delegados e para remover a última ocorrência da lista de invocação de um delegado da lista de invocação de outro delegado, respectivamente.
Action a = () => Debug.WriteLine("Invoke a");
Action b = () => Debug.WriteLine("Invoke b");
a += b;
a.Invoke();
//Invoke a
//Invoke b
Action c = () => Debug.WriteLine("Invoke c");
Action d = () => Debug.WriteLine("Invoke d");
Action e = Action.Combine(c, d);
e.Invoke();
//Invoke c
//Invoke d
a -= b;
a.Invoke();
//Invoke a
e = Action.Remove(e, d);
e.Invoke();
//Invoke c
Eles parecem produzir os mesmos resultados em termos de como eles combinam / removem da lista de invocação.
Eu vi os dois modos usados em vários exemplos em SO e em outro código. Existe uma razão pela qual eu deveria estar usando um caminho ou outro? Há algum buraco cai? Por exemplo - eu posso ver um aviso na linhaa -= b;
declarando issoDelegate subtraction has unpredictable results
- então devo evitar isso usando Remover?