onde (restrição de tipo genérico) (C# Reference)
Em uma definição de tipo genérico, o where cláusula é usada para especificar restrições sobre os tipos que podem ser usados como argumentos para um parâmetro de tipo definido em uma declaração genérica.Por exemplo, você pode declarar uma classe genérica, MyGenericClass, de modo que o parâmetro de tipo T implementa o IComparable<T> interface:
public class MyGenericClass<T> where T:IComparable { }
Observação |
---|
Para obter mais informações na página onde a cláusula em uma expressão de consulta, consulte onde a cláusula (referência de C#). |
Com restrições de interface, um where cláusula pode incluir uma restrição de classe base, que informa que um tipo deve ter especificado como uma classe base de classe (ou ser a classe em si) para ser usado como um argumento de tipo para o tipo genérico.Se tal uma restrição for usada, ele deve aparecer antes de quaisquer outras restrições sobre aquele parâmetro de tipo.
class MyClass<T, U>
where T : class
where U : struct
{ }
O where cláusula também pode incluir uma restrição de construtor.É possível criar uma instância de um parâmetro de tipo usando o operador new; No entanto, para fazê-lo o parâmetro de tipo deve ser limitado pela restrição de construtor, new().O restrição New (de) permite que o compilador sabe que qualquer argumento de tipo fornecido deve ter um acessíveis sem parâmetros – ou o construtor padrão –.Por exemplo:
public class MyGenericClass<T> where T : IComparable, new()
{
// The following line is not possible without new() constraint:
T item = new T();
}
O new() restrição é exibido por última na where cláusula.
Com vários parâmetros de tipo, use um where cláusula para cada parâmetro de tipo, por exemplo:
interface IMyInterface
{
}
class Dictionary<TKey, TVal>
where TKey : IComparable, IEnumerable
where TVal : IMyInterface
{
public void Add(TKey key, TVal val)
{
}
}
Você também pode anexar restrições digitar parâmetros de métodos genéricos, como este:
public bool MyMethod<T>(T t) where T : IMyInterface { }
Observe que a sintaxe para descrever as restrições de parâmetro de tipo em delegados é o mesmo que um dos métodos:
delegate T MyDelegate<T>() where T : new()
Para obter informações sobre representantes genéricos, consulte Representantes genéricos.
Para obter detalhes sobre a sintaxe e uso de restrições, consulte restrições em parâmetros de tipo.
Especificação da linguagem C#
Para obter mais informações, consulte Especificação de linguagem do C# A especificação da linguagem é a fonte definitiva para a sintaxe e o uso da linguagem C#.
Consulte também
Referência
Introdução aos genéricos (guia de programação do C#)
nova restrição (referência de C#)
Restrições em parâmetros de tipo (guia de programação do C#)