如何存储在全局变量中c#

Posted

技术标签:

【中文标题】如何存储在全局变量中c#【英文标题】:how to store in a global variable c# 【发布时间】:2017-05-22 23:05:19 【问题描述】:

如何将voterid 存储到全局变量中,以便在其他表单上使用它?我将使用这个voterid 来检查选民是否已经投票。

MessageBox.Show("Welcome!");
OleDbCommand comd1 = new OleDbCommand();
comd1.Connection = connection;
comd1.CommandText = "SELECT VoterID FROM tbl_voter where Uname='" +
                    txt_user.Text + "' and Pword='" + txt_pass.Text + "'";
voterid = Convert.ToString(comd1.ExecuteScalar());
MessageBox.Show(voterid);

connection.Close();
connection.Dispose();

this.Hide();
vote form3 = new vote();
form3.ShowDialog();

【问题讨论】:

你可以在你正在处理的任何类中创建一个public static 属性。然后从另一种形式,您将引用whateverclass.whateverproperty。不过,这不是一个很棒的 OO 设计。更好的解决方案是将信息传递给另一个表单本身,或者至少告诉对方从哪里获取信息。静态属性解决方案创建了所谓的“紧密耦合”情况,通常不受欢迎。 非常广泛的问题,有很多解决方案。您可以查看静态类/方法以获取一些示例。 @itsme86 非常感谢! 【参考方案1】:

如果我们谈论的是 Windows 窗体应用程序,并且“全局”是指“在整个过程中通用”,那么您可以使用 static variable。

在这个例子中,我创建了一个特殊的类来保存静态变量,并声明一个字段和一个属性,您的程序可以使用它们,并且在整个过程中只保存一个值。

static class GlobalVariables

    static public string SomeVariable  get; set ;   //As a property
    static public string SomeOtherVariable;           //As a field

请注意,如果您的程序是多线程的,最好在静态变量周围放置一个关键部分,如下所示:

static class GlobalVariables

    static private string LockObject = new Object();
    static private string _someVariable;

    static public string SomeVariable 
     
        get
        
            lock(LockObject)  return _someVariable; 
        
        set
        
            lock(LockObject)  _someVariable = value; 
        
    

【讨论】:

不应该每个成员也有static关键字吗? 伙计们,你们太快了,我还在打字!是的,你是对的。 错误的顺序! 呃,Resharper 可以自己搞定。 c# 规范将允许访问修饰符的任何顺序,static 对我来说比publicprivate 更重要。 哇,我以前怎么没注意到【参考方案2】:

应用程序状态属于应用程序状态对象。 WinForms 应用程序没有其中之一,但您可以创建一个 AppState 类并将一个实例放在 Program 类的静态属性中。然后,您可以将您喜欢的任何全局状态定义为 AppState 的强类型属性,并从程序中的任何位置将它们引用为 Program.AppState.MyGlobalStronglyTypedValue

如果您需要保持应用状态,您可以将(反)序列化逻辑放入 AppState 类中。

【讨论】:

我不确定所有全局变量都应该被认为是应用程序状态的一部分。 我是。变量保持状态,这就是它们所做的全部。如果它不是 global 状态,那么为什么它在全局变量中?如果你想到了,请随意提供一个反例。 谢谢大家,非常感谢你们的帮助! 例如,单例将希望自己的静态变量不在 AppState 中,或者缓存提供者希望将缓存存储在它管理的私有变量中,或者对无状态服务的静态引用应该是在别处举行。仅仅因为它们是全局变量而将所有全局变量放在一个位置会导致结构混乱并违反 OCP 和 SRP。 我认为我们分歧的基础是对全球这个词的解释。你所描述的东西不是全球性的,它们是共享的。这是不一样的。您正在谈论定义范围。如果您可以有意义地做到这一点,那么这些项目就不是全局的,或者至少不应该是。

以上是关于如何存储在全局变量中c#的主要内容,如果未能解决你的问题,请参考以下文章

c#如何定义全局变量list

C#中如何定义全局变量及在各窗体中使用全局变量

C#中在哪里声明全局变量啊,具体位置在哪儿,我是初学者。。。

在C#中静态变量是否全局变量

android如何从本地变量存储在全局变量

如何将有效负载值存储在全局变量中 - Objective-c