我想知道这些选项中哪一个被认为是最干净或最好使用的,以及为什么。
其中一个暴露了一个乘客列表,让用户添加和删除等操作。另一个则隐藏了列表,只允许用户枚举它们并使用特殊方法添加。
示例1
其中一个暴露了一个乘客列表,让用户添加和删除等操作。另一个则隐藏了列表,只允许用户枚举它们并使用特殊方法添加。
示例1
class Bus
{
public IEnumerable<Person> Passengers { get { return passengers; } }
private List<Passengers> passengers;
public Bus()
{
passengers = new List<Passenger>();
}
public void AddPassenger(Passenger passenger)
{
passengers.Add(passenger);
}
}
var bus = new Bus1();
bus.AddPassenger(new Passenger());
foreach(var passenger in bus.Passengers)
Console.WriteLine(passenger);
示例2
class Bus
{
public List<Person> Passengers { get; private set; }
public Bus()
{
Passengers = new List<Passenger>();
}
}
var bus = new Bus();
bus.Passengers.Add(new Passenger());
foreach(var passenger in bus.Passengers)
Console.WriteLine(passenger);
我认为第一种类更好地实现了封装。在这种情况下,这可能是更好的方法(因为你应该确保公交车上还有空间等)。但我猜想第二种类也可能有用?比如说,如果这个类并不真正关心列表发生了什么,只要它有一个就可以了。你觉得呢?
List<T>
中可变性方面的讨论:https://dev59.com/PnM_5IYBdhLWcg3wyWWt - Sam Harwell