Я часто хотел создать список объектов, где каждый объект должен реализовывать ряд интерфейсов. Например, я хотел бы сделать что-то похожее на следующее:
List<T> where T : IConvertible, IComparable _myList;
Еще один вариант, который я рассматривал, - создать третий интерфейс, который реализует эти два, чтобы любой объект, реализующий эти два интерфейса, по своей сути реализует мои.
public interface IConvertibleAndComparable
: IConvertible, IComparable { }
List<IConvertibleAndComparable> _myList;
С этим я бы мог добавить любой объект, который реализует как IConvertible
, так и IComparable
, включая double
и int
, а также мои собственные объекты. Явно реализовать IConvertibleAndComparable
не требуется, поскольку он не добавляет никаких новых функциональных возможностей за пределы интерфейсов в наследованиях.
Я понимаю, что первый фрагмент является незаконным, а второй, хотя и законным, не делает то, что я хочу. Можно ли достичь того, что я пытаюсь сделать? Если нет, будет ли кто-нибудь из них быть кандидатом на будущую функцию С#?
(Примечание. Это было бы законным приложением для пустых интерфейсов.)
Edit
В более общем смысле я хотел бы выполнить одно из следующих действий:
private MyGenericClass<T> where T : IA, IB, ... _myClass;
где я могу объявить все ограничения на T
, которые мне нужны, или
public interface IMyCombinedInterface : IA, IB, ... {}
private MyGenericClass<IMyCombinedInterface> _myClass;
где любой тип, реализующий IA
, IB
и ...
по своей сути (или неявно) реализует IMyCombinedInterface
(только если IMyCombinedInterface
явно не объявляет новую функциональность).