我正在用 C# 做一个项目,我遇到了以下问题:
我有一些数据类型的类,例如 Person 类,它保存有关一个人的信息。
另外,我还有一个DataManager类,负责管理我程序中的人员。如果您想添加、获取、查找或删除一个人,您只能通过 DataManager 类来完成。
问题是我不希望除 DataManager 类之外的任何人都能够更改 Person 对象。例如,如果有人调用 DataManager.getPerson(int ID)
,他们将获得一个 Person 对象,并且能够使用该 Person 对象的 setter 函数来更改其内容(名字、姓氏、身份证等)。
我想避免这种情况。我只希望 DataManager 类能够更改 Person 对象(通过 DataManager.changeFirstNameForPerson(int ID, string name)
等方法)。
可以实现该目标的最佳类结构是什么?
最佳答案
好吧,您永远无法阻止人们 100% 更改这些值。他们总是可以通过反射(reflection)。
但是,从 API 的角度来看,您可以将 Person 类的所有 getter 公开,并将所有 setter 公开。只要 Person 和 DataManager 类在同一个程序集中,DataManager 就可以很好地访问 setter,但引用该程序集的其他应用程序则不能。
public class Person
{
public string Fname { get; internal set; }
}
public class DataManager
{
public void ChangeNameForPerson(int id, string fname)
{
Person p = Person.GetById(id);
// Inside the same assembly. Setter is accessible
p.Fname = fname;
}
}
在程序集之外,你会有这个:
Person p = DataManager.GetPerson(1);
p.Fname = "asdf"; // Compile time error
DataManager.ChangeNameForPerson(1, "asdf"); // Works fine
关于c# - 数据管理 - 只读数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167831/