Share via


where (restrição de tipo genérico) (Referência de C#)

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 interface:

public class MyGenericClass<T> where T:IComparable { }

Dica

Para obter mais informações na página onde a cláusula em uma expressão de consulta, consulte Cláusula where (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 a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Introdução aos genéricos (Guia de Programação em C#)

Restrição new (Referência de C#)

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

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#