Templates Tipos Genericos Herencia : Javier Luna blog

Wednesday, March 25, 2009

Templates Tipos Genericos Herencia

Cuando estas desarrollando software, es una consecuencia natural el uso de Templates para facilitar la construccion del codigo, ahorrar lineas repetitivas disgregadas en diferentes clases de uso final, y reducir los tiempos.

Si dentro de la construccion de tus clases solo utilizas Templates para hacer un List<String> o a lo mucho un IEnumerable<Client>, ten la plena seguridad que estas desperdiciando el uso favorable de la tecnologia que tienes en tus manos, en este caso C#, de manera irresponsable y muy probablemente estes quemando tus neuronas haciendo el laborioso COPY & PASTE por everywhere...!

Debes cambiar el rumbo, alguien debe girar el timon :)

En ese uso de siniestros Templates, dentro de la definicion de aquellas clases que heredan su comportamiento de otras clases que se han diseñado como Templates, muy probablemente te encuentres con un mensaje como este:

'TEntity' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TEntity' in the generic type or method 'SomeClass<TEntity>'

Lo que sucede es que la clase SomeClass presenta una serie de restricciones para su normal ejecucion. Dichas restricciones se implementan con el uso de la clausula where en la definicion de la clase o en los metodos de la misma, que el arquitecto establecio en el diseño de dicha clase.

En consecuencia, al implementar la herencia de una clase que tiene dichas restricciones, solo queda ir de la mano con ella.

En terminos sencillos, tendras que establecer las mismas restricciones haciendo uso de la clausula where en la implementacion de tu nueva clase y agregar otras nuevas que creas conveniente para la construccion de la tuya.

En el caso en concreto del mensaje que te mostre anteriormente, este nos indica que el tipo generico TEntity requiere ser instanciada en alguna parte del codigo de la clase heredable.

Es decir, debes agregar esta restriccion: where TEntity : new() en tu nueva clase.

No comments: