访问WPF应用程序类中变量的首选方法

10 浏览
0 Comments

访问WPF应用程序类中变量的首选方法

在下面的代码中,我声明了应用程序级别的 static 变量,然后从 MainWindow.xaml.cs 中访问它。在这里使用静态变量是否应该避免,而应该在下面的 MainWindow.xaml.cs 代码中首先实例化 App class,然后使用变量作为 var app = Application.Current as App; app.myVariable = \"Some Value\";。我已经在一些地方读到过(比如 这里),通常我们应该避免使用静态变量。

App.xaml.cs

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

MainWindow.xaml.cs

public partial class MainWindow : Window
{
  ..........
  private void btnUserUpdate_Click(object sender, RoutedEventArgs e)
  {
    App.myVariable = "Some value";
    ......
  }
}

admin 更改状态以发布 2023年5月24日
0
0 Comments

作为 Clemens 回答的补充,我更喜欢以下方式:

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();

0
0 Comments

由于App不是一个静态类,而该类的一个实例已经可以通过静态Application.Current属性来访问,因此不需要声明其属性为静态。

相反,声明非静态属性如

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

并像这样访问它们:

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


请注意,应避免在没有检查结果是否为null的情况下使用as运算符,例如

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

因为这会导致空引用异常,而实际上你想要得到的是无效转换异常,以防转换操作失败。

在可能返回null的情况下,进行测试:

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

0