La cláusula where se utiliza para especificar restricciones de tipo que pueden servir como variables para parámetros de tipo definidos en declaraciones genéricas. 1. Restricciones de interfaz. Por ejemplo, puedes declarar una clase genérica MyGenericClass, de modo que el parámetro de tipo T pueda implementar la<T> interfaz IComparable:
clase pública<T> MyGenericClass donde T:IComparable { }
2. Restricción de clase base: Indica que un tipo debe usar la clase especificada como clase base (o la clase en sí) para ser utilizada como parámetro de tipo para ese tipo genérico. Una vez utilizada dicha restricción, debe aparecer antes que todas las demás restricciones sobre el tipo de parámetro. clase MyClassy<T, U> donde T : clase donde U : struct
{
}
La cláusula 3.where también puede incluir restricciones del constructor. Puedes usar el nuevo operador para crear una instancia de un parámetro de tipo; Pero el argumento de tipo debe estar restringido por la restricción constructor new() para esto. La restricción new() indica al compilador que cualquier tipo de argumento proporcionado debe tener un constructor accesible sin parámetros (o por defecto). Por ejemplo: clase pública <T> MyGenericClass donde T: IComparable, new()
{ La siguiente línea no es posible sin una nueva restricción: Elemento T = nuevo T();
} La restricción new() aparece al final de la cláusula where.
4. Para múltiples parámetros de tipo, cada parámetro de tipo utiliza una cláusula where, Por ejemplo: interfaz MyI { } Diccionario de clase<TKey, TVal> donde TKey: Comparable, IEnumerable donde TVal: MyI
{ empty público Añadir (clave TKey, TVal val)
{
}
}
5. También puedes añadir restricciones a parámetros de tipo de métodos genéricos, como:
public bool <T>MyMethod(T t) donde T : IMyInterface { }
Nótese que la sintaxis para describir las restricciones de parámetros de tipo es la misma tanto para los delegados como para los métodos:
delegar T <T>MiDelegado() donde T : nuevo()
Dónde genérico
Donde genérico puede calificar parámetros de tipo. Hay varias maneras.
·donde T : struct restringe el parámetro de tipo T debe heredar de System.ValueType.
·donde T: clase restringe el tipo El parámetro T debe ser un tipo de referencia, es decir, no puede heredarse del Sistema.TipoValor.
donde T : new() restringe el parámetro de tipo T debe tener un constructor por defecto
·donde T : NameOfClass restringe el parámetro de tipo que T debe heredar de una clase o implementar una interfaz.
Estos calificativos pueden combinarse, como: clase pública Punto donde T : clase, IComparable, nuevo() |