gpt4 book ai didi

c# - 数据管理 - 只读数据

转载 作者:行者123 更新时间:2023-11-30 16:33:29 25 4
gpt4 key购买 nike

我正在用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com