A cláusula onde é usada para especificar restrições de tipo que podem servir como variáveis para parâmetros de tipo definidos em declarações genéricas. 1. Restrições de interface. Por exemplo, você pode declarar uma classe genérica MyGenericClass, de modo que o parâmetro de tipo T possa implementar a<T> interface IComparable:
classe pública<T> MyGenericClass onde T:IComparable { }
2. Restrição de classe base: Indica que um tipo deve usar a classe especificada como classe base (ou a própria classe) para ser usada como parâmetro de tipo para esse tipo genérico. Uma vez que tal restrição é usada, ela deve aparecer antes de todas as outras restrições sobre o tipo de parâmetro. Classe MyClassy<T, U> onde T : classe onde U : struct
{
}
A cláusula 3.where também pode incluir restrições de construtor. Você pode usar o novo operador para criar uma instância de um parâmetro tipo; Mas o argumento do tipo deve ser restrito pela restrição do construtor new() para isso. A restrição new() informa o compilador que qualquer tipo de argumento fornecido deve ter um construtor acessível sem parâmetros (ou padrão). Por exemplo: classe pública <T> MyGenericClass onde T: IComparable, new()
{ A linha a seguir não é possível sem a restrição nova(): Item T = novo T();
} A restrição new() aparece no final da cláusula where.
4. Para múltiplos parâmetros de tipo, cada parâmetro de tipo usa uma cláusula where, Por exemplo: interface MyI { } Dicionário da turma<TKey, TVal> onde TKey: Comparável, IEnumerável onde TVal: MyI
{ empty público Adicionar (chave TKey, TVal val)
{
}
}
5. Você também pode anexar restrições aos parâmetros de tipo de métodos genéricos, tais como:
bool público <T>MyMethod(T t) onde T : IMyInterface { }
Note que a sintaxe para descrever as restrições dos parâmetros de tipo é a mesma tanto para delegados quanto para métodos:
delegar T <T>MyDelegate() onde T : new()
Genérico onde
O Where genérico pode qualificar parâmetros de tipo. Existem várias maneiras.
·onde T : struct restringe o parâmetro de tipo que T deve herdar do System.ValueType.
·onde T: classe restringe o tipo O parâmetro T deve ser um tipo de referência, ou seja, não pode ser herdado do System.ValueType.
onde T : new() restringe o parâmetro de tipo T deve ter um construtor padrão
·onde T : NameOfClass restringe o parâmetro de tipo T deve herdar de uma classe ou implementar uma interface.
Esses qualificadores podem ser combinados, como: classe pública Ponto onde T : classe, IComparable, new() |