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

Preguntas similare

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










Respuesta Responder a este mensaje
#2 Mario Alberto Chavez
10/01/2006 - 22:14 | Informe spam
Hay un error en la linea que dice:
Object objeto = Assembly.CreateInstance(tipoObjeto, parametros);

debe de decir:
Object objeto = System.Activator.CreateInstance(tipoObjeto, parametros);

Mario Alberto Chavez wrote:
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










email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida