我有以下问题。
假设有一个这样定义的公共 Class1:
public class Class1
{
public string pr1 { get; set; }
public string pr2 { get; set; }
public Class1()
{
}
}
我不允许修改类定义 - 它被其他人使用,他们需要以这种方式编写。麻烦来了。
我需要static List<Class1> myStaticList
它只能在 Class2 内部修改,而其他任何地方都是真正只读的。“真正只读”是指用户不得更改任何内容,包括列表元素的属性。
像:Class2.list[0].pr1="newValue"
从 Class2 外部调用的东西应该被阻止。
ReadOnlyCollection
不要做任何工作,因为用户仍然可以修改列表的给定元素,因此此处给出的解决方案List<T> readonly with a private set不能满足我的需求。
基本上我已经找到了很多使列表/集合只读的可能方法(例如IReadOnlyList
),但是如果它们具有公共设置器,它们都留下了更改给定列表元素属性的可能性。
我发现的唯一解决方案是创建新类:
public class Class1ReadOnly : Class1
{
public new string pr1{ get; private set; }
public new string pr2{ get; private set; }
public Class1ReadOnly(Class1 tmp)
{
pr1= tmp.pr1;
pr2 = tmp.pr2;
}
}
但我希望两个能找到更好的方法,因为在我看来,仅仅因为一个只读列表就定义一个全新的类有点奇怪
提前感谢任何线索。
这甚至可能以这种不同的方式进行吗?
现实世界的上下文是这样的:
在代码中,我们编辑数据库,我想要备份已更改初始值的记录列表。我想让它保持静态只是为了有可能在我想要的任何地方恢复数据库。Class1 包含我们数据库的单个记录的所有值,因此List<Class1>
我可以保留所有修改过的记录并在需要时恢复它们。而且由于它是备份,因此必须是只读的,因为意外的更改可能导致灾难。