【发布时间】:2026-02-10 17:30:01
【问题描述】:
如何“很好地”实现以下模式:(有点 arrrgh 为什么我不能只使用公共变量)
我有一组类可以生成而另一组类可以使用的一大块数据。有多种方法可以生成和使用这些数据。数据集具有固定的层次结构,具有多个级别的值字段。我有数字、枚举、字符串。
因此,在我的应用程序的原型版本中,我以完全公开的方式将一堆类拼凑在一起:
public class AllData
{
public IdentifyData identifyData;
public FirmwareData firmwareData;
public VersionData versionData;
public TestData testData;
public ServiceData serviceData;
public ErrorLog errorLog;
public AllData()
{
identifyData = new IdentifyData();
versionData = new VersionData();
firmwareData = new FirmwareData();
testData = new TestData();
serviceData = new ServiceData();
errorLog = new ErrorLog();
}
}
(...)
public class FirmwareData
{
public DataStatus status;
public int build;
public int variant;
public FirmwareData()
{
status = new DataStatus();
}
}
(Etc.)
现在我正在做软件的真实版本,并且想要做正确的事情,所以我开始对所有东西进行财产化。但是,我觉得这样做会影响代码。它变得又大又丑,在我的情况下没有出现好处。
我考虑过使用结构,但我真的不想一直按值传递所有这些数据。此外,我需要在这里和那里进行一些范围和完整性检查。
关于如何以一种不错的方式实现此数据模型的任何线索? (请注意,我在 OOP 和 C# 方面不是很有经验)
如果可能的话,我希望数据在移交给消费者类时变为只读,如何做到这一点?
感谢和问候
拉尔斯
【问题讨论】:
-
er.... 只需在末尾添加
{get;set;}即可创建属性 - 没那么难看;或{get;private set;},如果您不希望外部代码设置它...?也许{get;internal set;}如果您不希望不同程序集中的代码能够使用设置器...? -
是的,还不错。但是我可以用 .NET 框架 2.0 做到这一点吗? (使用 Visual Studio 2010)
-
是的;这是一种语言特性,而不是运行时特性——C# 4 编译器对此很好,即使针对 .NET 2.0
标签: c# oop class design-patterns struct