如果我有这样的接口:
public interface IAlbum
{
string Title { get; set; }
}
public interface ITrack
{
string Title { get; set; }
float Duration { get; set; }
}
向IAlbum界面添加曲目列表的最佳方法是什么?如果我希望单个轨道成为属性而没有暴露的轨道阵列会怎样?
答案 0 :(得分:5)
使用indexer。具体做法是:
ITrack this[int trackIndex]
{
get;
}
答案 1 :(得分:2)
曲目列表可以是:
IList<ITrack> Tracks {get;}
或
IEnumerable<ITrack> Tracks {get;}
如果您希望具体类型公开更具体的API,您可以通过显式实现来实现上述内容。
理论上你可以做:
interface IAlbum : IEnumerable<ITrack> {...}
但我认为这不是一个好主意。
将曲目重新显示为属性;如果我理解正确,你可以在运行时通过在具体专辑类型上实现ICustomTypeDescriptor
来实现这种“类型”。但它是非常重要的并且有点混乱 - 除非你使用数据绑定,否则它将无济于事。
答案 2 :(得分:0)
您还可以提供适用于曲目标题的索引器。这是[轨道属性]和集合之间的[种类]。
ITrack this[string trackName] { get { return getTraxckUsingName(trackName); } }