代码之家  ›  专栏  ›  技术社区  ›  nam

从WPF应用程序类访问变量的首选方式

  •  0
  • nam  · 技术社区  · 4 年前

    在下面的代码中,我声明了应用程序级别 static 变量,然后从访问它 MainWindow.xaml.cs 这里应该避免使用静态变量,而是实例化 App class 主窗口.xaml.cs 首先编写下面的代码,并将其中的变量用作 var app = Application.Current as App; app.myVariable = "Some Value"; 我在一些地方读过书(比如 here )那个 generally 我们应该避免使用静态变量。

    代码文件 :

    public partial class App : Application
    {
        private static string myVarialbe {get; set;}
        ...........
    }
    

    主窗口.xaml.cs :

    public partial class MainWindow : Window
    {
      ..........
      private void btnUserUpdate_Click(object sender, RoutedEventArgs e)
      {
        App.myVariable = "Some value";
        ......
      }
    }
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   Torben Schramme    4 年前

    作为克莱门斯回答的补充,我更喜欢以下方式:

    public partial class App : Application
    {
        public static App Me => ((App) Application.Current);
    
        public string MyProperty1 { get; set; }
        public int MyProperty2 { get; set; }
        public void DoSomething() { }
        ...
    }
    

    这样你就不必到处写选角的东西了。现在你可以简单地编写这样的代码:

    App.Me.MyProperty1 = "some value";
    App.Me.MyProperty2 = 5;
    App.Me.DoSomething();
    
        2
  •  1
  •   Clemens    4 年前

    自从 App 不是静态类,并且该类的实例已经可以通过静态类访问 Application.Current 属性,不需要将其任何属性声明为静态。

    相反,声明非静态属性,如

    public partial class App : Application
    {
        public string MyProperty { get; set; }
        ...
    }
    

    并按如下方式访问它们:

    ((App)Application.Current).MyProperty = "Some value";
    

    注意,您应该避免使用 as 操作员未检查结果 null ,比如

    var app = Application.Current as App;
    app.MyProperty = "Some Value";
    

    因为这将导致NullReferenceException而不是InvalidCastException,这是您在强制转换操作失败时实际想要得到的结果。

    在以下潜在情况下 作为 可以有效地返回null,测试它:

    var app = Application.Current as App;
    if (app != null)
    {
        app.MyProperty = "Some Value";
    }