是否可以使用接口定义递归数据结构?

时间:2019-06-02 05:50:49

标签: c# oop recursion design-patterns

显然可以使用class

public class MyClass
{
    public IEnumerable<MyClass> Children { get; set; }
}

但是我不确定interface是否可以使用,因为我不知道在接口内引用“相同类型”的方法。

示例:

public interface IMyClass
{
    public IEnumerable<IMyClass> Children { get; set; }
}

我认为键入参数可能会使这种情况发生,但是还无法想象出一种方法。

1 个答案:

答案 0 :(得分:3)

如果我理解正确,您想返回实现接口的(IEnumerable)类,而不是接口本身?

如果是这样,那么您可以这样做:

public interface IMyClass<T>
    where T : IMyClass<T>
{
    IEnumerable<T> Children { get; set; }
}

public class Foo : IMyClass<Foo> {
    public IEnumerable<Foo> Children {
        get => throw new NotImplementedException();
        set => throw new NotImplementedException();
    }
}