访问WPF应用程序类中变量的首选方法
访问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日
作为 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();
由于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"; }