如何声明一个全局使用的变量

How to declare a variable for global use

我在论坛上搜索了类似的问题,据我所知,应该避免使用全局变量。对我来说这还不合逻辑,因为我是编程新手。如果我理解正确,静态变量应该可以完成我正在寻找的工作。

I've made a combobox of four choices in the mainwindow and when a comboboxitem is selected, variable b is declared.这是在 private void SelectionChanged.

中完成的

选择声明变量b的comboboxitem时,会弹出一个usercontrol。我想在我的程序中进一步使用变量 b,但我无法访问它。我试图在代码的开头声明 static int b; ,但我不确定我是否正确理解了静态变量的使用。有人可以帮我吗?

可以创建全局使用的变量。只需创建静态字段或 属性:

public static class YourStorage
{
   public static object Storage1;
   public static string StringStorage;
} 

无论您想要什么,您都可以从该存储中设置或获取值:

public class AnotherClass
{
   private void GetDataFromStorage()
   {
      string getValue=YourStorage.StringStorage; 
   }
   private void SetDataFromStorage()
   {
       YourStorage.StringStorage="new value"; 
   }  
}

要创建一个"global variable",它应该是publicstatic,并在public 静态 class。在 .NET 中,这是声明常量的常用方法(例如 Math.PI),但它们不是 变量!

public static class EveryoneCanSeeMe
{
    public static object EveryOneCanModifyMe;
}

非public 变量仅在声明它们的 classes 或方法中可见。

ps: 使用全局变量很糟糕

完全避免使用全局变量和 static 关键字,除非您 100% 确定没有其他地址可以解决您的解决方案(有时您可能被迫使用静态变量,通常用于遗留代码修补程序)。

  1. Statics/globals 使代码紧密耦合
  2. 打破了 OOD 原则(通常是依赖注入、单一职责原则)
  3. 类型初始化过程并不像许多人想象的那么简单
  4. 有时无法通过单元测试覆盖代码或破坏良好测试的 ATRIP 原则(隔离原则)

所以建议:

  1. 首先了解问题,roots,你要达到什么目的
  2. 检查您的设计

你可以这样做

App.Current.Properties["valueTobestored"] = valueTobestored;

然后像

一样访问它
string mystoredValue = Convert.ToString(App.Current.Properties["valueTobestored"]);