Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF/C#:将资源放在应用程序和强制转换应用程序中被认为是不好的做法吗?_C#_Wpf - Fatal编程技术网

WPF/C#:将资源放在应用程序和强制转换应用程序中被认为是不好的做法吗?

WPF/C#:将资源放在应用程序和强制转换应用程序中被认为是不好的做法吗?,c#,wpf,C#,Wpf,我有一个MyApplication类型,它派生自Application。整个程序在整个时间内只有一个应用程序对象在运行。如果一些共享资源(如字符串、整数和一些配置值)放在MyApplication中,您认为从其他类访问它们而不引用application对象的可接受方式是什么?通过调用((MyApplicationType)Application.Current).SomeString来访问MyApplication中的公共字符串是否可以?还是应该显式添加引用应用程序对象的方法 方法呢?我还可以通

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


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

配置值应该从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
}
根据的评论,我认为这样做是可以的。 但我认为在ResourceDictionary中定义资源是更好的方法,您可以在XAML/C#中使用它,并且更容易进行本地化。 您可以参考以下链接:

评论

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

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

请注意,应用程序中的所有资源都必须与应用程序一起加载。资源越大,你的应用程序启动所需的时间就越长。这是一个很好的建议,但我已经在使用app.config和enums了。我的一些app.config值应该是整数,因此我在MyApplication对象中执行所有错误检查和强制转换,并将所有设置值存储在其中以使其更干净。现在我的问题是,使用
((MyApplicationType)Application.Current)访问值可以接受吗?
,我不是在优化速度或资源使用,只是想知道访问应用程序对象值的正确方法