prueba

Page 163

El lenguaje de programación C#

Tema 12: Delegados y eventos

llamadas a los métodos del delegado original, evitar que una excepción en la ejecución de uno de los métodos impida la ejecución de los demás, etc. Aparte de estos métodos de objeto, la clase System.MulticastDelegate también cuenta con los siguientes métodos de tipo de uso frecuente: •

static Delegate Combine(Delegate fuente, Delegate destino):

Devuelve un nuevo objeto delegado que almacena la concatenación de los métodos de fuente con los de destino. Por tanto, nótese que estas tres instrucciones son equivalentes: objDelegado += new D(obj1.g); objDelegado = objDelegado + new D(obj1.g); objDelegado = (D) MulticastDelegate.Combine(objDelegado, new D(obj1.g);

Es más, en realidad el compilador de C# lo que hace es convertir toda aplicación del operador + entre delegados en una llamada a Combine() como la mostrada. Hay que tener cuidado con los tipos de los delegados a combinar ya que han de ser exactamente los mismos o si no se lanza una System.ArgumentException, y ello ocurre aún en el caso de que dichos sólo se diferencien en su nombre y no en sus tipos de parámetros y valor de retorno. •

static Delegate Combine(Delegate[] tabla):

static Delegate Remove(Delegate original, Delegate aBorrar):

Devuelve un nuevo delegado cuyos métodos almacenados son la concatenación de todos los de la lista que se le pasa como parámetro y en el orden en que apareciesen en ella. Es una buena forma de crear delegados con muchos métodos sin tener que aplicar += varias veces. Todos los objetos delegados de la tabla han de ser del mismo tipo, pues si no se produciría una System.ArgumentException. Devuelve un nuevo delegado cuyos métodos almacenados son el resultado de eliminar de original los que tuviese aBorrar. Por tanto, estas instrucciones son equivalentes: objDelegado -= new D(obj1.g); objDelegado - objDelegado - new D(obj1.g); objDelegado = (D) MulticastDelegate.Remove(objDelegado, new D(obj1.g);

Nuevamente, lo que hace el compilador de C# es convertir toda aplicación del operador - entre delegados en una llamada a Remove() como la mostrada. Por tanto, al igual que con -=, para borrar métodos de objeto se ha de especificar en aBorrar un objeto delegado que contenga referencias a métodos asociados a exáctamente los mismos objetos que los almacenados en original. •

static Delegate CreateDelegate (Type tipo, MehodInfo método):

Ya se usó este método en el ejemplo de comprobación de tipos del epígrafe “Definición de delegados” de este mismo tema. Como recordará permite crear dinámicamente objetos delegados, ya que devuelve un objeto delegado del tipo indicado que almacena una referencia al método representado por su segundo parámetro.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.