我想在基类中编写一个静态实例属性并派生此实例,但是我遇到了一些问题。
这是基类的代码-我目前有:
public abstract class ResourceInstance<T>
{
private static T _instance;
public static T Instance
{
get
{
if (_instance != null)
return _instance;
var method = MethodBase.GetCurrentMethod();
var declaringType = method.DeclaringType;
if (declaringType != null)
{
var name = declaringType.Name;
_instance = (T)Application.Current.TryFindResource(name);
}
return _instance;
}
}
}
如您所见,它的主要用途是用于Converts之类的WPF资源,通常您在XAML中声明一个静态的键,以便将该实例也用于Codebehind Binding Creation。
有了它,应该可以编写以获取在XAML中声明的资源:
var fooConverter = FooConverter.Instance;
现在,这在基类中可以正常工作。
MethodBase.GetCurrentMethod()。DeclaringType.Name将始终返回“ ResourceInstance”,我希望获得派生的类名,因为在我们的应用程序中,ClassName == ResourceKey
Resharper,总是抱怨我正在快速从派生类访问静态属性,并希望我通过基类访问它
这是派生类的示例:
public abstract class BaseConverter : ResourceInstance<IValueConverter>, IValueConverter
{
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
public class FooConverter : BaseConverter
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return true;
}
}
希望您能提供帮助,谢谢。
不知道我是否正确理解了您的问题,但是我会这样做:
public class ResourceInstance<T>
where T : ResourceInstance<T> // To ensure correct usage
{
private static T _instance;
public static T Instance
{
get
{
if (_instance != null)
return _instance;
var name = typeof(T).Name;
_instance = (T)Application.Current.TryFindResource(name);
return _instance;
}
}
}
public class FooConverter : ResourceInstance<FooConverter>, IValueConverter
{
...
}
对T的约束确保将类与模式一起使用class X : ResourceInstance<X>
; 这样,typeof(X)
将永远是X
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句