Sam*_*ach 1 c# ienumerable readonly immutability mutability
你为什么要申报IEnumerable<T> readonly?
从这篇关于异步和等待的文章中我们得到以下代码.
class OrderHandler
{
private readonly IEnumerable<Order> _orders;
public OrderHandler()
{
// Set orders.
}
public IEnumerable<Order> GetAllOrders()
{
return _orders;
}
}
Run Code Online (Sandbox Code Playgroud)
IEnumerable<T>是不可改变的.这与readonly关键字有何不同?
readonly此处的关键字适用于该字段_orders.它只是意味着在对象的生命周期内不能为字段分配不同的值.例如,这是不可能的:
class OrderHandler
{
private readonly IEnumerable<Order> _orders;
public OrderHandler()
{
// Set orders.
}
void SomeMethod()
{
_orders = new Order[0];
}
}
Run Code Online (Sandbox Code Playgroud)
您将收到此编译器错误:
甲
readonly字段不能被分配到(除了在构造函数或变量初始值)
这不会使集合成为只读集合.例如,您仍然可以这样做:
class OrderHandler
{
public readonly IEnumerable<Order> Orders;
public OrderHandler()
{
Orders = new List<Order>();
}
}
((List<Order>)OrderHandler.Orders).Add(new Order());
Run Code Online (Sandbox Code Playgroud)
这可能会违反班级的线程安全性.有关不可变集合的信息,请参阅Tigran的答案.
进一步阅读
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |