Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
http://msdn.microsoft.com/es-es/library/sz6zd40f(v=vs.80)
class BaseNode { }
1 de 3
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:
2 de 3
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