Thiết lập riêng cho danh sách, bộ sưu tập, v.v. có nghĩa là không thể thay thế toàn bộ danh sách, nhưng không có gì để bảo vệ thành viên công khai trong danh sách.
Ví dụ:
public class MyClass
{
public IList<string> MyList {get; private set;}
public MyClass()
{
MyList = new List<string>(){"One","Two", "Three"};
}
}
public class Consumer
{
public void DoSomething()
{
MyClass myClass = new MyClass();
myClass.MyList = new List<string>(); // This would not be allowed,
// due to the private setter
myClass.MyList.Add("new string"); // This would be allowed, because it's
// calling a method on the existing
// list--not replacing the list itself
}
}
Để ngăn chặn người tiêu dùng từ thay đổi các thành viên trong danh sách bạn có thể phơi bày nó như một giao diện Read-only, như IEnumerable<string>
, ReadOnlyCollection<string>
, hoặc bằng cách gọi List.AsReadOnly()
trong tuyên bố lớp học.
public class MyClass
{
public IList<string> MyList {get; private set;}
public MyClass()
{
MyList = new List<string>(){"One","Two", "Three"}.AsReadOnly();
}
}
public class Consumer
{
public void DoSomething()
{
MyClass myClass = new MyClass();
myClass.MyList = new List<string>(); // This would not be allowed,
// due to the private setter
myClass.MyList.Add("new string"); // This would not be allowed, the
// ReadOnlyCollection<string> would throw
// a NotSupportedException
}
}
Bạn thêm người truy cập vào bộ này. tức là: {get; bộ tư nhân; } – phillip
Bạn cần cụ thể hơn. Bạn có muốn ngăn không cho khách hàng thay đổi tham chiếu 'Danh sách' hay bạn muốn ngăn không cho khách hàng thêm mục vào hoặc xóa mục khỏi danh sách? –
Tôi muốn ngăn khách hàng thay đổi tham chiếu Danh sách. – anmarti