Compartilhar via


onde ( restriçãode tipo genérico) (C# referência)

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 na declaração genérico. Por exemplo, você pode declarar uma classe genérica, MyGenericClass, de tal forma que o parâmetro de tipo T implementa o IComparable<T> interface:

public class MyGenericClass<T> where T:IComparable { }
ObservaçãoObservaçã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#).

Além de para restrições de interface, um where cláusula pode incluir uma restrição de classe base, que declara 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 aquele tipo genérico. Se tal uma restrição for usada, ele deve aparecer antes de quaisquer outras restrições sobre o 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 fazer isso 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 aparece por último 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 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 C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Introduction to Generics (C# Programming Guide)

new Constraint (C# Reference)

Constraints on Type Parameters (C# Programming Guide)

Conceitos

C# Programming Guide

Outros recursos

C# Reference