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