最近我使用了一个继承自集合的类,而不是在类内实例化集合,这样做是否可行或会在后面造成看不见的问题呢?以下是为了更好的理解而提供的示例:
public class Cars : List<aCar>
而不是像这样:
public class Cars
{
List<aCar> CarList = new List<aCar>();
}
有什么想法吗?
最近我使用了一个继承自集合的类,而不是在类内实例化集合,这样做是否可行或会在后面造成看不见的问题呢?以下是为了更好的理解而提供的示例:
public class Cars : List<aCar>
而不是像这样:
public class Cars
{
List<aCar> CarList = new List<aCar>();
}
有什么想法吗?
问题在于,您的 Cars 类仍将具有从 List 继承的接口,这可能允许您不想要的操作。
这取决于你的类的最终目的。如果它只用作集合的自己实现,请使用继承。否则,将集合包含为属性。第二个选项更加灵活:
我之前误读了问题。
我建议使用组合而不是继承。如果你想要使用所有花哨的LINQ东西,尽管实现IEnumerable<T>
甚至IList<T>
- 但我不会直接从List<T>
派生。
如果你确实想要“免费”获得集合功能但仍保留控制,你可以使用CollectionBase。这仍然将你限制在继承方面,但至少你可以更多地控制集合中发生的事情。
“Cars”类真的必要吗?它比“List”多了一些功能吗?如果没有,应该使用“List”(或更好的“IList”)。
如果“Cars”类有任何附加功能,则有两种主要情况:
.
public class CarList<T> : List<T> where T : Car {
// some added functionality
}
public class CarList<T> : IList<T> where T : Car {
private IList<T> innerList;
public CarList() { this.innerList = new List<T>(); }
// implementation of IList<T>
// some added functionality
}