代码之家  ›  专栏  ›  技术社区  ›  quillbreaker

接口中的父/子关系

c#
  •  2
  • quillbreaker  · 技术社区  · 17 年前

    如果我有这样的接口:

    public interface IAlbum
    {
        string Title { get; set; }
    }
    
    public interface ITrack
    {
        string Title { get; set; }
        float Duration { get; set; }
    }
    

    向IAlbum界面添加曲目列表的最佳方式是什么?如果我希望单独的轨迹是属性,而不是有一个暴露的轨迹数组,该怎么办?

    3 回复  |  直到 17 年前
        1
  •  5
  •   Yuriy Faktorovich    17 年前

    使用 indexer . 明确地:

        ITrack this[int trackIndex]
        {
            get;
        }
    
        2
  •  2
  •   Marc Gravell    17 年前

    IList<ITrack> Tracks {get;}
    

    IEnumerable<ITrack> Tracks {get;}
    

    理论上,你可以:

    interface IAlbum : IEnumerable<ITrack> {...}
    

    将轨道重新暴露为属性;如果我理解正确,您可以在运行时通过实现 ICustomTypeDescriptor 在具体的相册类型上。但它不是琐碎的,而且有点凌乱——除非您使用数据绑定,否则它不会有很大帮助。

        3
  •  0
  •   Kepboy    17 年前

    您还可以提供一个与曲目标题一起工作的索引器。这是轨道属性和集合属性之间的[排序]。

    ITrack this[string trackName]
    {
        get { return getTraxckUsingName(trackName); }
    }