Crear objeto de tipo "genérico"

10/01/2006 - 20:57 por Benton | Informe spam
Hola,

Para agregar el contenido de un datatable a una lista generica, hago esto:

foreach(DataRow row in table.Rows)
List.Add(new BusinessObject(row));

Necesito definir en tiempo de ejecución el tipo datos del nuevo objeto, ya
que no será precisamente del tipo BusinessObject, sino de un tipo heredado
de éste, cuyo nombre solo conozco en tiempo de ejecución.

Un pseudo-código chapucero de lo que necesito sería esto:

string tipo = "Clientes";
List.Add(new tipo(row));

Donde "Clientes" es el tipo heredado de BusinessObject, pero su nombre lo
tengo en una variable string.

¿Puede hacerse lo que busco? Espero haberme explicado.

Saludos,

-Benton
 

Leer las respuestas

#1 Mario Alberto Chavez
10/01/2006 - 22:09 | Informe spam
Benton;

Algo asi debe de funcionar para lo que buscas:
// Este es el nombre de tu objeto, pero necesita el namespace completo
// para que pueda ser identificado
Type tipoObjeto = Type.GetType("Namespace.mitipo");

// Aqui agregas en el arreglo la lista de parametros que necesita tu
// constructor del objeto
Object[] parametros = new Object[1];
parametros = row;

// Aqui creas una nueva instancia de tu objeto
Object objeto = Assembly.CreateInstance(tipoObjeto, parametros);

// Y finalmente lo agregas a tu Lista.
List.Add(objeto);

Solo agrega el namespace System.Reflection.

Saludos
Mario Alberto
http://mario-chavez.decisicionesinteligentes.com

Benton wrote:
Hola,

Para agregar el contenido de un datatable a una lista generica, hago esto:

foreach(DataRow row in table.Rows)
List.Add(new BusinessObject(row));

Necesito definir en tiempo de ejecución el tipo datos del nuevo objeto, ya
que no será precisamente del tipo BusinessObject, sino de un tipo heredado
de éste, cuyo nombre solo conozco en tiempo de ejecución.

Un pseudo-código chapucero de lo que necesito sería esto:

string tipo = "Clientes";
List.Add(new tipo(row));

Donde "Clientes" es el tipo heredado de BusinessObject, pero su nombre lo
tengo en una variable string.

¿Puede hacerse lo que busco? Espero haberme explicado.

Saludos,

-Benton










Preguntas similares