我经常想创建一个对象列表,其中每个对象都必须实现多个接口。例如,我想做类似于以下的事情:
List<T> where T : IConvertible, IComparable _myList;
我考虑的另一个选择是创建实现这两个接口的第三个接口,以便实现这两个接口的任何对象固有地实现我的。
public interface IConvertibleAndComparable
: IConvertible, IComparable { }
List<IConvertibleAndComparable> _myList;
有了这个,我将能够添加任何实现IConvertible
and的对象IComparable
,包括double
and int
,以及我自己的对象。不需要显式实现IConvertibleAndComparable
,因为它不会在继承接口之外添加任何新功能。
我知道第一个片段是非法的,第二个片段虽然合法,但没有做我想做的事。是否有可能实现我想要做的事情?如果不是,这些中的任何一个都可以成为未来 C# 功能的候选者吗?
(注意:这将是空接口的合法应用程序。)
编辑
在更一般的意义上,我想执行以下操作之一:
private MyGenericClass<T> where T : IA, IB, ... _myClass;
T
我可以在哪里声明我需要的所有限制,或者
public interface IMyCombinedInterface : IA, IB, ... {}
private MyGenericClass<IMyCombinedInterface> _myClass;
实现IA
,IB
和...
固有(或隐式)实现的任何类型IMyCombinedInterface
(仅在IMyCombinedInterface
未显式声明新功能时)。