C#这是对通用接口的误用吗?

时间:2016-02-04 02:16:34

标签: c# generics interface

我想将几个通用接口一起用作可重用的子系统。

以下是接口:

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();    
}

0 个答案:

没有答案