универсальная функция, где универсальный тип - это любой интерфейс - PullRequest
3 голосов
/ 18 июня 2010

Я бы хотел реализовать универсальную функцию с общим ограничением, что передаваемый тип является интерфейсом.Возможно ли это в C #?У меня все работает без ограничений, но код не будет работать во время выполнения, если это не интерфейс, поэтому я хотел бы проверить время компиляции.

public T MyFunction<T> where T : {any interface type} { return null; }

Ответы [ 3 ]

7 голосов
/ 18 июня 2010

Вы можете ограничить тип конкретным интерфейсом, но не «любым» произвольным интерфейсом.

// This is allowable
public T MyFunction<T>() where T : IMyInterface { return null; }

Это позволит вам передать любой объект, который реализует этот конкретный интерфейс.


Edit:

Учитывая ваши цели, исходя из комментариев, я лично, вероятно, просто вставлю некоторую проверку во время выполнения:

public IEnumerable<T> LoadInterfaceImplementations<T>()
{
    Type type = typeof(T);
    if (!type.IsInterface)
        throw new ArgumentException("The type must be an Interface");

    // ...
}
5 голосов
/ 18 июня 2010

Нет, нет способа ограничить тип только интерфейсами.

1 голос
/ 18 июня 2010

Вы должны использовать определенный интерфейс. Вы можете создать базовый интерфейс, от которого получаются все остальные интерфейсы, и использовать его в качестве ограничения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...