我想将几个通用接口一起用作可重用的子系统。
以下是接口:
interface ICollection<TElement> : IEnumerable<TElement> {
TElement this[Int32 index] { get; }
TElement Add();
}
interface IElement<TCollection> {
TCollection Collection { get; }
}
我想在TElement和TCollection上使用泛型约束,以便能够1)强制执行接口的预期用法,2)使用实现类型作为方法返回类型。
interface ICollection<TCollection, TElement> : IEnumerable<TElement>
where TCollection : ICollection<TCollection, TElement>
where TElement : IElement<TCollection, TElement> {
TElement this[Int32 index] { get; }
TElement Add();
}
interface IElement<TCollection, TElement>
where TCollection : ICollection<TCollection, TElement>
where TElement : IElement<TCollection, TElement> {
TCollection Collection { get; }
}
它编译,但这是滥用通用接口吗?
编辑:
感谢您的评论。我将避免像上面第二个例子那样的代码。
有没有更简洁的方法来实现我的第二个目标,即使用实现类型作为接口方法的方法返回类型?
这不会编译,但基本上就是我想要做的事情:
interface IThing {
IThing GetThing();
}
class Thing : IThing {
Thing GetThing();
}