C#Windows窗体应用程序中的全局变量方法?(公共静态类GlobalData是最好的)

C#Windows窗体应用程序中的全局变量方法?(公共静态类GlobalData是最好的),c#,winforms,global-variables,C#,Winforms,Global Variables,我想在我的C#Windows窗体应用程序中提供一些自定义配置(从文件读入) 是说的概念: 创建静态类,例如“公共静态类GlobalData” 从主窗体事件的“加载”操作加载 这听起来怎么样?这是最佳做法吗?查找ConfigurationManager.AppSettings 查看ConfigurationManager.AppSettings中的示例代码 在的示例代码中,我不太愿意使用“GlobalData”静态类,因为它带有泛型Utils类型catch-all类的味道,最终可能成为各种垃圾的倾

我想在我的C#Windows窗体应用程序中提供一些自定义配置(从文件读入)

是说的概念:

  • 创建静态类,例如“公共静态类GlobalData”
  • 从主窗体事件的“加载”操作加载

  • 这听起来怎么样?这是最佳做法吗?

    查找ConfigurationManager.AppSettings


    查看ConfigurationManager.AppSettings中的示例代码


    的示例代码中,我不太愿意使用“GlobalData”静态类,因为它带有泛型Utils类型catch-all类的味道,最终可能成为各种垃圾的倾倒场。我更倾向于使用Windows窗体设置(无论是用户设置还是应用程序设置)来存储配置信息。然后,可以使用
    Properties.Settings.Default.MySetting
    从Winforms项目中的任何位置检索配置数据

    话虽如此,我可以在静态类中保存一些东西。例如,我有一个静态SqlDBConnectionInfo对象,它包含我的服务器、数据库和凭据,可用于创建Sql连接对象或执行SMO备份/还原操作。这个静态对象在登录时被实例化,任何其他需要以某种方式使用SQL数据库的类都可以获取该静态对象


    编辑:另一种可能性是,如果使用实例类反序列化/序列化配置数据,则可以在Program.cs中创建一个静态属性,用于保存反序列化配置对象的实例。然后,项目中的其他类可以使用:
    MyProjectName.MyConfigurationObject

    引用您的配置数据,我会犹豫使用“GlobalData”静态类,因为它有一种泛型Utils类型catch all类的味道,这可能最终成为各种垃圾的倾倒场。我更倾向于使用Windows窗体设置(无论是用户设置还是应用程序设置)来存储配置信息。然后,可以使用
    Properties.Settings.Default.MySetting
    从Winforms项目中的任何位置检索配置数据

    话虽如此,我可以在静态类中保存一些东西。例如,我有一个静态SqlDBConnectionInfo对象,它包含我的服务器、数据库和凭据,可用于创建Sql连接对象或执行SMO备份/还原操作。这个静态对象在登录时被实例化,任何其他需要以某种方式使用SQL数据库的类都可以获取该静态对象


    编辑:另一种可能性是,如果使用实例类反序列化/序列化配置数据,则可以在Program.cs中创建一个静态属性,用于保存反序列化配置对象的实例。然后,项目中的其他类可以使用以下命令引用您的配置数据:
    MyProjectName.MyConfigurationObject

    ,正如其他人所述,您可以使用AppSettings存储简单数据。基础很简单;超越它们是很难的。您还可以将类序列化为XML或XML,编写自定义存储格式,使用数据库等

    使配置在整个应用程序中可用是另一个问题。静态类和单例本质上是很难理解的,并且在其他类中引入。一个选项是为配置数据类创建接口,在启动时创建并加载配置,然后将接口传递给需要它的任何类(通常作为构造函数参数)。这就是所谓的


    如果你经常这样做,有一些库可以让你更容易(在你通过学习曲线之后)。请参阅。

    如其他人所述,您可以使用AppSettings存储简单数据。基础很简单;超越它们是很难的。您还可以将类序列化为XML或XML,编写自定义存储格式,使用数据库等

    使配置在整个应用程序中可用是另一个问题。静态类和单例本质上是很难理解的,并且在其他类中引入。一个选项是为配置数据类创建接口,在启动时创建并加载配置,然后将接口传递给需要它的任何类(通常作为构造函数参数)。这就是所谓的


    如果你经常这样做,有一些库可以让你更容易(在你通过学习曲线之后)。请参阅。

    对于窗口位置和大小等简单值,我使用默认设置文件。这很好,因为设置为您编译成属性。您可以按自己喜欢的方式实现其他设置

    我不经常在Windows窗体中使用应用程序设置文件。我一直在ASP.NET中使用它们。有时,我将信息存储在
    DataTables
    内存中,并使用
    DataTable.Load
    WriteXml
    函数保存信息


    关于全局访问,在Windows窗体中,我向项目添加了一个组件类,并在Main中创建了一个全局静态实例。然后,我可以引用所有表单中的实例,并将全局数据添加到此组件。数据作为属性或通过函数公开。

    对于窗口位置和大小等简单值,我使用默认设置文件。这很好,因为设置为您编译成属性。您可以按自己喜欢的方式实现其他设置

    我不经常在Windows窗体中使用应用程序设置文件。我一直在ASP.NET中使用它们。有时,我将信息存储在
    DataTables
    内存中,并使用
    DataTable.Load
    WriteXml
    函数来持久化
        public static String Name
        {
            get { return Globals.name; }
            set { Globals.name = value; }
        }
    
        public static String Email
        {
            get { return Globals.email; }
            set { Globals.email = value; }
        }
    
    }
    
    private void btnLogin_Click(object sender, EventArgs e)
    {
    
        if (!validate())
            return;
    
        // for admin
        if (txtUserName.Text == "a" && txtPassword.Text == "a")
        {
            this.Hide();
            Globals.Email = txtUserName.Text;
            Globals.IsAdmin = true;
            Globals.Password = txtPassword.Text;
    
            // show other form
            FrmMain frmmain = new FrmMain();
            frmmain.ShowDialog();
    
            // close application
            //this.Close();
    
        }
    
    }