在Josh Smith的this教程中,字段被定义为readonly:
public class CustomerRepository
{
readonly List<Customer> _customers;
...
public CustomerRepository(string customerDataFile)
{
_customers = LoadCustomers(customerDataFile);
}
...
}
以后更新只读列表_customers
:
public void AddCustomer(Customer customer)
{
if (customer == null)
throw new ArgumentNullException("customer");
if (!_customers.Contains(customer))
{
_customers.Add(customer);
if (this.CustomerAdded != null)
this.CustomerAdded(this, new CustomerAddedEventArgs(customer));
}
}
如何允许这样做以及使用readonly有什么意义?
答案 0 :(得分:8)
SupportMapFragment
变量本身(List<Customer>
)是_customers
- 这意味着您无法将其切换为完全不同的列表,确保所有正在查看它的人始终是看到同一个清单。但是,您仍然可以更改列表中的元素。
答案 1 :(得分:4)
来自MSDN(https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx):
readonly
关键字是您可以在字段上使用的修饰符。当字段声明包含readonly
修饰符时,声明引入的字段的赋值只能作为声明的一部分或在同一类的构造函数中出现
您无法为_customers
字段分配新值,但仍会更改该列表中的元素。
答案 2 :(得分:2)
_customers.Add(customer);
不会更新列表。此运算符更新列表的内容。如果要更新列表,则必须使用_customers= ...
之类的内容。这可以通过readonly
答案 3 :(得分:1)
使字段只读的要点是不能更改引用。这意味着你不能写像
这样的东西_customers = null;
或
_customers = new List<Customer>();
调用方法.Add()通过方法访问集合,并且不会更改对象的引用。
这可以用于防止任何NullReferenceException。