Interface A
    {
      string x {get;set;}
      IEnumarable<InterfaceB> DetailList { get; set; }
    }
    Interface B
    {
     int z;
     int y;
    }

    Class B :Interface B
    {
      implements z;
      implements y;
    }
    Class A :Interface A
    {
      implements x;
      IEnumarable<ClassB> DetailList {get;set;} // This line is giving trouble.
    }


这是违反OO概念的代码吗?我想如果我从InterfaceB派生ClassB,那么我可以在ClassA中使用ClassB而不是InterfaceB。 VS不喜欢这样,它要求我在ClassA中使用InterfaceB而不是ClassB。
还有其他方法可以做到这一点。

我愿意考虑其他设计选项,我有一些域对象,其属性由接口A定义,每个域对象将具有由接口B定义的对应对象。
例如
音乐会(A)音乐会地点(B)
喜剧节目(A)喜剧节目位置(B)

如果您认为我不够清楚,请随时提出更多问题。
提前致谢

最佳答案

您可以这样:

public interface InterfaceA<T> where T : InterfaceB
{
    string x {get;set;}
    IEnumerable<T> DetailList { get; set; }
}

public interface InterfaceB
{
    int z { get; }
    int y { get; }
}

public class ClassB : InterfaceB
{
    public int z { get; private set; }
    public int y { get; private set; }
}

public class ClassA : InterfaceA<ClassB>
{
    public int z { get; private set; }

    public string x { get; set; }

    public IEnumerable<ClassB> DetailList {get;set;}
}


但我不确定这是否适合您?

有关更多信息,请参见此处:c# interface implemention - why does this not build?

关于c# - 如何实现定义另一个接口(interface)元素的接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8597291/

10-16 23:30