类似的东西(我猜你必须具有只读访问权限,这意味着Add
,RemoveAt
等Clear
是不允许的):
public class RegistrationManager
{
// change RegisteredObjects to be private
//TODO: do you really want List<object> instead of, say, List<RegisteredItem>?
private List<object> RegisteredObjects = new List<object>();
// let RegisteredObjects be visible as read-only
public IReadOnlyList<object> Items {
get {
return RegisteredObjects;
}
}
// your TryRegisterObject
public bool TryRegisterObject(object o)
{
// ...
// Add or not to Registered
// ...
}
}
该解决方案的缺点是,从技术上讲,可以回退,例如
RegistrationManager manager = ...
// you can't do this
// manager.Items.Add(new Object()); // <- compile time error
// but can do this
((List<Object>) (manager.Items)).Add(new Object());