Sei sulla pagina 1di 3

Clases genricas (C#)

http://msdn.microsoft.com/es-es/library/sz6zd40f(v=vs.80)

Clases genricas (Gua de programacin de C#)


Visual Studio 2005 Personas que lo han encontrado til: 4 de 6 - Valorar este tema Las clases genricas encapsulan operaciones que no son especficas de un tipo de datos concreto. El uso ms comn de las clases genricas se da con las colecciones, como listas vinculadas, tablas hash, pilas, colas, rboles, etc., en las que las operaciones tales como agregar y quitar elementos de la coleccin se realizan de forma similar independientemente del tipo de datos que se almacena. En la mayora de los escenarios que necesitan clases de coleccin, el enfoque recomendado es utilizar las que proporciona la biblioteca de clases de .NET Framework 2.0. Para obtener ms informacin acerca del uso de estas clases, vea Tipos genricos en la biblioteca de clases de .NET Framework (Gua de programacin de C#). Normalmente, para crear clases genricas se empieza a partir de una clase concreta existente y se cambian los tipos, uno a uno, por parmetros de tipo hasta que se obtiene un equilibrio ptimo entre generalizacin y utilidad. Al crear sus propias clases genricas, se deben tener en cuenta las siguientes consideraciones importantes: Tipos que se generalizan como parmetros de tipo. Como regla general, cuantos ms tipos se puedan parametrizar, ms flexible y reutilizable ser el cdigo. Sin embargo, un exceso de generalizacin puede producir cdigo difcil de leer y comprender para otros programadores. Restricciones, en su caso, que se aplicarn a los parmetros de tipo (Vea Restricciones de tipos de parmetros (Gua de programacin de C#)). Una buena regla consiste en aplicar las restricciones mximas posibles que sigan permitiendo controlar los tipos que es necesario controlar. Por ejemplo, si sabe que la clase genrica est exclusivamente destinada al uso con tipos de referencia, aplique una restriccin de clase. Esto evitar el uso imprevisto de la clase con tipos de valor y permitir utilizar el operador as en T y comprobar si hay valores nulos. Factorizar o no el comportamiento genrico en las clases base y las subclases. Dado que las clases genricas pueden actuar como clases base, se aplican las mismas consideraciones de diseo que con las clases no genricas. Vea ms adelante las reglas para la herencia de clases base genricas. Implementar o no una o varias interfaces genricas. Por ejemplo, si est diseando una clase que se utilizar para crear elementos en una coleccin basada en genricos, puede que necesite implementar una interfaz como IComparable<T>, donde T es el tipo de la clase. Para obtener un ejemplo de una clase genrica simple, vea Introduccin a los genricos (Gua de programacin de C#) Las reglas para los parmetros de tipo y las restricciones tienen varias implicaciones en el comportamiento de la clase genrica, especialmente en lo relativo a la herencia y accesibilidad de los miembros. Antes de continuar, es importante entender algunos trminos. Para una clase genrica Node<T>, el cdigo de cliente puede hacer referencia a la clase especificando un argumento de tipo, para crear un tipo construido cerrado (Node<int> ), o puede omitir la especificacin del parmetro de tipo, por ejemplo al especificar una clase base genrica, para crear un tipo construido abierto (Node<T> ). Las clases genricas pueden heredar de clases base construidas cerradas o construidas abiertas:

class BaseNode { }

1 de 3

03/07/2012 07:55 a.m.

Clases genricas (C#) class BaseNodeGeneric<T> { } // concrete type class NodeConcrete<T> : BaseNode { } //closed constructed type class NodeClosed<T> : BaseNodeGeneric<int> { } //open constructed type class NodeOpen<T> : BaseNodeGeneric<T> { }

http://msdn.microsoft.com/es-es/library/sz6zd40f(v=vs.80)

Las clases no genricas (concretas) pueden heredar de las clases base construidas cerradas, pero no de las clases construidas abiertas ni de los parmetros de tipo 'naked', porque no hay ninguna forma de que el cdigo de cliente pueda proporcionar el tipo de argumento necesario para crear una instancia de la clase base en tiempo de ejecucin.

//No error class Node1 : BaseNodeGeneric<int> { } //Generates an error //class Node2 : BaseNodeGeneric<T> {} //Generates an error //class Node3 : T {}

Las clases genricas que heredan de tipos construidos abiertos deben proporcionar argumentos de tipo para cada parmetro de tipo de clase base no compartidos con la clase que hereda, tal como se muestra en el cdigo siguiente:

class BaseNodeMultiple<T, U> { } //No error class Node4<T> : BaseNodeMultiple<T, int> { } //No error class Node5<T, U> : BaseNodeMultiple<T, U> { } //Generates an error //class Node6<T> : BaseNodeMultiple<T, U> {}

Las clases genricas que heredan de tipos construidos abiertos deben especificar restricciones que impliquen o sean un superconjunto de las restricciones sobre el tipo base:

class NodeItem<T> where T : System.IComparable<T>, new() { } class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { }

Los tipos genricos pueden utilizar varios parmetros y restricciones de tipo, de la forma siguiente:

class SuperKeyType<K, V, U>

2 de 3

03/07/2012 07:55 a.m.

Clases genricas (C#) where U : System.IComparable<U> where V : new() { }

http://msdn.microsoft.com/es-es/library/sz6zd40f(v=vs.80)

Los tipos construidos abiertos y construidos cerrados se pueden utilizar como parmetros de mtodo:

void Swap<T>(List<T> list1, List<T> list2) { //code to swap items } void Swap(List<int> list1, List<int> list2) { //code to swap items }

Las clases genricas son invariables. En otras palabras, si un parmetro de entrada especifica una List<BaseClass> , obtendr un error de compilacin si intenta proporcionar una List<DerivedClass>.

Vea tambin
Referencia System.Collections.Generic Conceptos Gua de programacin de C# Genricos (Gua de programacin de C#)

Le ha resultado til?

No

Contenido de la comunidad
2012 Microsoft. Reservados todos los derechos.

3 de 3

03/07/2012 07:55 a.m.

Potrebbero piacerti anche