onde (restrição de tipo genérico) (guia de programação translation from VPE for Csharp)

Em uma definição de tipo genérico, o where cláusula é usada para especificar restrições sobre sistema autônomo tipos que podem ser usados sistema autônomo 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 sobre o local onde a cláusula em uma expressão de consulta, ver cláusula WHERE (Translation from VPE for Csharp Reference).

Juntamente 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 sistema autônomo uma classe base de classe (ou ser classe em si) a ser usado sistema autônomo um argumento de tipo para o tipo genérico. Se for usada como uma restrição, ele deve aparecer antes de outras restrições no parâmetro desse tipo.

class MyClass<T, U>
    where T : class
    where U : struct
{}

The 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, na ordem fazer para que o parâmetro de tipo deve ser restrita por restrição de construtor, new(). The Restrição New() permite que o compilador sabe que qualquer argumento de tipo fornecido deve têm um construtor sem parâmetros – ou padrão – acessível.Por exemplo:

public class MyGenericClass<T> where T : IComparable, new()
{
    // The following line is not possible without new() constraint:
    T item = new T();
}

The new() restrição é exibido por última no 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 sistema autônomo 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 como representantes genéricos, consulte Representantes genéricos.

Para obter detalhes sobre a sintaxe e uso de restrições, consulte Restrições sobre parâmetros de tipo.

Especificação da linguagem C#

Para obter mais informações, consulte as seções a seguir no Especificação da linguagem C#:

  • 19.1.4 Restrições

Consulte também

Conceitos

Guia de Programação C#

Referência

Introdução ao Generics (guia de programação C#)

Nova restrição (referência C#)

Restrições em parâmetros de tipo (Guia de programação C#)

Outros recursos

Referência C#