2

我有一个派生自 Application 的类型 MyApplication。整个程序只有 1 个 Application 对象在整个时间内运行。如果一些共享资源(如字符串、整数和一些配置值)放在 MyApplication 中,您认为在不引用应用程序对象的情况下从其他类访问它们的可接受方式是什么?可以通过调用访问 MyApplication 中的公共字符串((MyApplicationType)Application.Current).SomeString吗?或者我应该明确添加一种引用 Application 对象的方法?

方法呢?我也可以通过调用来访问应用程序的方法((MyApplicationType)Application.Current).SomeMethod()吗?它肯定有效,但我不清楚其含义以及这是否被认为是不好的做法。

4

2 回答 2

1

根据MSDN的评论,我认为这样做是可以的。但我认为在 ResourceDictionary 中定义资源是更好的方法,您可以在 XAML / C# 中使用它,并且更容易进行本地化。您可以参考链接: http: //msdn.microsoft.com/en-us/library/ms750613.aspx http://msdn.microsoft.com/en-us/library/bb613547.aspx

评论

Application 是每个 AppDomain 的单例类型,它实现静态 Current 属性以提供对当前 AppDomain 的 Application 实例的共享访问。这种设计保证了由应用程序管理的状态,包括共享资源和状态,可从单个共享位置获得。此属性是线程安全的,可从任何线程获得。

对于方法,我认为这取决于您的方法的作用。如果您的方法只返回临时文件路径,为什么不将其设为静态?

于 2013-02-05T14:35:23.080 回答
0

配置值应该来自读取 app.config 文件。这是一个关于此的 SO Q/A: 如何在 WPF 应用程序中使用 App.config 文件?

对于不更改或不可配置的值,请​​使用具有常量成员的静态类以使其可根据需要访问。

public static class UsefulConstants
{
  public const int FeetInMile = 5280;

  public const int DaysInWeek = 7;

  public const string SampleString = "This is a sample";
}

使用静态类很简单。

int f = UsefulConstants.FeetInMile;

相关的整数值可以指定为枚举。

public enum MonthValue
{
    January = 1,
    February = 2,
    March = 3,
    //Omitted for brevity...
    December = 12
}

使用枚举的另一个好处是可以让您将方法参数限制为相关值。

public SomeFunction(MonthValue month)
{
   //Do something here with the month passed in
}
于 2013-02-05T13:44:39.980 回答