InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial C#
Introduccion a C#
Programacion con C#
Fundamentos de C#
Operadores
Instrucciones
Estrcuturas de control.
Definición de clases
Creación de objetos
Herencia y métodos virtuales
Polimorfismo
Ocultación de miembros
Miembros de tipo
Encapsulación
Espacios de nombres
Importación de espacios de nombres
Espacio de nombres distribuidos
Variables y tipos de datos
Tablas unidimensionales
Tablas multidimensionales
La clase System.Array
Cadenas de texto
Constantes
Orden de inicialización de variables
Métodos
Métodos externos
Constructores
Destructores
Propiedades
Indizadores
Redefinición de operadores
Delegados y eventos
La clase MulticastDelegate
Llamadas asíncronas
Implementación interna de los delegados
Eventos
Estructuras
Boxing y unboxing
Constructores de estructuras
Enumeraciones
Interfaces
Excepciones
Otras instrucciones
Atributos
Definición de nuevos atributos
Lectura de atributos en tiempo de ejecución
Atributos de compilación
Pseudoatributos
Código inseguro
Definición de punteros
Manipulación de punteros
Operadores relacionados con código inseguro
Fijación de variables apuntadas
Novedades de C# 2.0
Genéricos
Tipos parciales
Iteradores
Mejoras en la manipulación de delegados
Tipos anulables
Modificadores de visibilidad de bloques get y set
Clases estáticas
Referencias a espacios de nombres
Supresión temporal de avisos
Atributos condicionales
Incrustación de tablas en estructuras
Modificaciones en el compilador
También puedes ver ...
TransactionScope - Simplificando el trabajo con transacciones.
LinQ To SQL - Un ejemplo sencillo
Cómo activar Intelisense (autocompletado) en el Web.config
Leer un campo XML de SQL Server 2005 con C#
TripleDES - Un ejemplo practico en C#
Mostrar un GridView dentro de un DataList
String.Format
Métodos Extensores: INNER JOIN
Problemas en la instalación de Visual Studio 2008-Visual studio web authoring component
Redimiento de VS2008

Afiliados
La Web del programador
MundoProgramacion


 

La clase System.MulticastDelegate

    Ya se ha dicho que la sintaxis especial de definición de delegados no es más que una forma especial definir subclases de System.MulticastDelegate. Esta clase a su vez deriva de System.Delegate, que representa a objetos delegados que sólo puede almacenar un único método. Por tanto, todos los objetos delegado que se definan contarán con los siguientes miembros comunes heredados de estas clases:

  • object Target: Propiedad de sólo lectura que almacena el objeto al que pertenece el último método añadido al objeto delegado. Si es un método de clase vale null.
  • MethodInfo Method: Propiedad de sólo lectura que almacena un objeto System.Reflection.MethodInfo con información sobre el último método añadido al objeto (nombre, modificadores, etc.) Para saber cómo acceder a estos datos puede consultar la documentación incluida en el SDK sobre la clase MethodInfo  
  • Delegate[] getInvocationList(): Permite acceder a todos los métodos almacenados en un delegado, ya que devuelve una tabla cuyos elementos son delegados cada uno de los cuales almacenan uno, y sólo uno, de los métodos del original. Estos delegados se encuentran ordenados en la tabla en el mismo orden en que sus métodos fueron fue almacenados en el objeto delegado original.

    Este método es especialmente útil porque a través de la tabla que retorna se pueden hacer cosas tales como ejecutar los métodos del delegado en un orden diferente al de su almacenamiento, procesar los valores de retorno de todas las 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): 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.

  • static Delegate Remove(Delegate original, Delegate aBorrar): 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 exactamente 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.

Inicio | Tutorial C# Delegados y eventos Tutorial C#Llamadas asíncronas Versión para imprimir Foros de consulta


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial C# Delegados y eventos Tutorial C#Llamadas asíncronas Versión para imprimir

La clase MulticastDelegate
Autor: José Antonio González Seco
Visitas: 5639 Fecha de publicación: 18/10/2006
José Antonio es experto en tecnologias Microsoft. Imparte cursos y conferencias en congresos sobre C# y .NET en Universidades de toda España (Sevilla, Barcelona, San Sebastián, Valencia, Oviedo, etc.) en representación de grandes empresas como Microsoft.




18/08/2008 SQL Server 2008
Visitas: 272 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 233 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 268 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 185 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 162 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 247 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 325 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 5225 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 658 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1551 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
INSTALAR VB.NET 2005 EXPRESS EN WINDOWS VISTA por tito2701 ... [Visual Basic .NET] 13 05/07/2007
LLave Primaria por Martin ... [ORACLE] 6 22/06/2007
dar formato a mail por Pako ... [C#] 4 16/03/2007
MP3 en Windows Vista por Alf ... [Actualidad] 3 20/04/2008
autogenerado por mily ... [Visual Basic .NET] 0 27/08/2008
Instalación de Oracle por Tatatn ... [ORACLE] 0 27/08/2008
For Update, existe alguna otra forma? por Sus ... [ORACLE] 1 27/08/2008
Cambiar el color del nodo de un treeview por Moises Bermdez Contreras ... [ASP.NET] 3 15/10/2007
librerias dinamicas por lupitaor ... [C#] 2 26/08/2008
Vista SQL 2005 limitada por Factor ... [SQL] 2 26/08/2008
Combobox por Corven ... [C#] 4 10/07/2008
Datagrid view por Jazmin ... [ASP.NET] 5 25/08/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
23/05/2006 Cursores en PL/SQL    forma parte de...Tutorial PL/SQL
03/10/2006 Creación de objetos    forma parte de...Tutorial C#
02/09/2007 Procedimientos almacenados en Transact SQL    forma parte de...Tutorial de Transact SQL
03/10/2006 Operadores    forma parte de...Tutorial C#
25/07/2007 Como trabajar con bases de datos con VB6
03/10/2006 Herencia y métodos virtuales    forma parte de...Tutorial C#
03/10/2006 Polimorfismo    forma parte de...Tutorial C#
14/05/2007 Fundamentos de Transact SQL    forma parte de...Tutorial de Transact SQL
22/10/2005 Vistas    forma parte de...Tutorial SQL
16/04/2004 C# y como crear instancias de clases desde un tipo String utilizando .NET FrameWork.

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]