Sobre Generics y constructores

21/01/2006 - 19:26 por Benton | Informe spam
Hola,

Dada una clase así:

public class Algo<T> where T: new()
{
void HacerAlgo()
{
T = new T();
}
...
}

¿Qué pasa si el constructor del tipo definitivo requiere un parámetro? Por
ejemplo quisiera hacer esto:

DataRow row = Tabla.NewRow();
T = new T(row);

¿Puede hacerse?

Saludos,

-Benton

Preguntas similare

Leer las respuestas

#1 A.Poblacion
22/01/2006 - 11:21 | Informe spam
"Benton" wrote in message
news:
Dada una clase así:

public class Algo<T> where T: new()
{
void HacerAlgo()
{
T = new T();
}
...
}

¿Qué pasa si el constructor del tipo definitivo requiere un parámetro? Por
ejemplo quisiera hacer esto:

DataRow row = Tabla.NewRow();
T = new T(row);

¿Puede hacerse?



No, el compilador te va a dar un error en esa linea diciendo que no se
sabe que T tenga un constructor que acepte un DataRow.

Si tienes control sobre las clases que estás pasando, podrías hacer que
todas heredaran de una misma clase madre, y en el "where" del template
indicar que T hereda de dicha clase madre. La clase madre puede tener un
constructor con parámetros.
Respuesta Responder a este mensaje
#2 Benton
23/01/2006 - 18:01 | Informe spam
Si tienes control sobre las clases que estás pasando, podrías hacer que
todas heredaran de una misma clase madre, y en el "where" del template
indicar que T hereda de dicha clase madre. La clase madre puede tener un
constructor con parámetros.



Perdona, pero no me queda claro.

La clase 'Entidad' tiene un constructor con un parámetro DataRow y uno sin
parámetros. Trato de hacer una lista de Entidades:

public abstract class ListaGen<T> where T: Entidad

Mas no sé si sea la forma correcta de, como dices, indicar que T hereda de
la clase Entity. Si lo hago así, no puedo crear nuevas instancias de T
porque no estoy especificando "new()" en el "where".

¿O te refieres a que tanto la clase Entidad como la clase ListaGen<T> deben
ser heredadas de una misma clase que acepte el parámetro?

Saludos,

-Benton


"A.Poblacion" escribió en
el mensaje news:
"Benton" wrote in message
news:
Dada una clase así:

public class Algo<T> where T: new()
{
void HacerAlgo()
{
T = new T();
}
...
}

¿Qué pasa si el constructor del tipo definitivo requiere un parámetro?
Por ejemplo quisiera hacer esto:

DataRow row = Tabla.NewRow();
T = new T(row);

¿Puede hacerse?



No, el compilador te va a dar un error en esa linea diciendo que no se
sabe que T tenga un constructor que acepte un DataRow.




Respuesta Responder a este mensaje
#3 A.Poblacion
24/01/2006 - 08:26 | Informe spam
"Benton" wrote in message
news:
Si tienes control sobre las clases que estás pasando, podrías hacer que
todas heredaran de una misma clase madre, y en el "where" del template
indicar que T hereda de dicha clase madre. La clase madre puede tener un
constructor con parámetros.



Perdona, pero no me queda claro.




Más o menos esto:

Supongamos que tienes dos clases "Entidad1" y "Entidad2" que quieres
pasar como "T" al ListaGen (si solo tienes una única "Entidad", entonces no
necesitas para nada el Generic).

Entonces lo que haces es crear una clase madre "Entidad":

public abstract class Entidad
{
protected DataRow f;
publlic Entidad(DataRow f) { this.f=f; }
}

Y luego haces que tus varias clases hereden de esta:

public class Entidad1:Entidad {...}
public class Entidad2:Entidad {...}

Entonces declaras el generic diciendo que el parámetro hereda de
Entidad:

public class ListaGen<T> where T: Entidad
{
...
T = new T(row);
...
}

...
ListaGen<Entidad1> lista1 = new ListaGen<Entidad1>;
ListaGen<Entidad2> lista2 = new ListaGen<Entidad2>;
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida