C # - Как я могу иметь тип, который ссылается на любой объект, реализующий набор интерфейсов?

Как мне получить ссылку на тип, которая ссылается на любой объект, реализующий набор интерфейсов ?

Например, у меня может быть такой универсальный тип:

Java:

public class Foo<T extends A & B> { }

C #

public class Foo<T> where T : A, B { }

Вот как получить универсальный тип для всего класса. Однако я хотел бы просто иметь член данных, который ссылается на любой объект, расширяющий данный набор интерфейсов.

Пример:

public class Foo
{
    protected <? extends A, B> object;

    public void setObject(<? extends A, B> object)
    {
        this.object = object;
    }
}

Если возможно иметь такой синтаксис типов, как я могу сделать это как на Java, так и на C #?


Я понимаю, что могу просто создать другой интерфейс, расширяющий все желаемые интерфейсы. Однако я не считаю это оптимальным, поскольку он без нужды добавляет еще один тип, единственная цель которого - обойти синтаксис. Конечно, это очень незначительная проблема, но с точки зрения элегантности это немного раздражает.

5
задан CodeBunny 13 November 2011 в 22:18
поделиться