struct是一种在内存中存储程序设置的好方法吗?

mlw*_*428 2 .net c#

我正在编写一个应用程序,需要在应用程序运行时存储程序设置(输入目录,输出目录等).我希望程序能够加载和使用(基于选项)生产环境和测试环境.

我会像这样设置结构:

Class AppSettings
{
    struct prodAppSettings
    {
        var settingName;
        var settingName2;
        var settingName3;
    }

    struct testAppSettings
    {
        var settingName;
        var settingName2;
        var settingName3;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我会在我的主类中根据用户想要的环境选项加载适当的设置.

AppSettings类将处理设置的加载(应用程序将与Web服务连接以进行设置,或者在网络连接不可用时,可以使用存储上次已知良好设置的XML文件).我不太熟悉结构,我想熟悉它们,所以这个项目可能是一个很好的地方.

编辑

澄清了一些事情.

Mar*_*ell 10

不,基本上.用一个class.你需要使用次数struct微乎其微的小(除非你正在编写XNA等等) -这是不是其中之一.如果你在struct这里使用,你可能会遇到至少两个问题:

  • 在堆栈上传递一个非常struct的(而不仅仅是一个参考)
  • 丢失了对内部副本的更新 struct

很可能是第三个(撕裂的值,通过多线程代码)

  • @gleng游戏开发人员**非常不愿意做任何可以触发GC的事情,所以看到`struct`表示的东西并不常见*直觉*是类; 为了帮助处理堆栈传递开销和丢失更新问题,它们通常作为`ref`传递.所以:很多开发人员都在努力解决这两件事(`struct`和`ref`) - 听起来像是一个有趣的食谱; p (6认同)

Dav*_*vid 6

你已经上课了:

class AppSettings
Run Code Online (Sandbox Code Playgroud)

为什么不用它呢?您可以使用嵌套类在内部进一步构建事物:

class AppSettings
{
    public SettingsGroup SomeGroupOfSettings { get; set; }
    // other settings

    public class SettingsGroup
    {
        // properties which are logically grouped together
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,在这里应用(或者至少可以)更多的逻辑,使得一个类越来越合适,这似乎是合理的.

结构往往适用于不可变数据的小分组.例如,通用结构将是两个坐标以形成点.如果任一坐标发生变化,那么这是一个全新的观点,也可以为它创建一个新的结构实例.像这样的更大和可能更复杂的东西确实属于一个类,它代表更多的"对象",而不是"不可变数据点的分组".