我想我的问题主题有点令人困惑。简而言之,我想要的是:
我的申请表中有很多Converters
。其中许多人没有实现ConvertBack
方法。所以我希望有一个BaseConverter
类,它提供ConvertBack
的简单空实现以及我从BaseConverter
继承的所有其他转换器。
我对BaseConverter
:
public class BaseConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// do nothing in this dummy implementation
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// do nothing in this dummy implementation
return null;
}
}
我疯狂的转换器之一:
public class CrazyConverter : BaseConverter
{
public new object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ACrazyConverionOfTheValue(...);
}
}
但是,如果我这样尝试并使用我的CrazyConverter
,我总是会使用Convert
的{{1}}方法。我从未调用过我的新BaseClass
方法。我做错了什么?
感谢您的回复!
答案 0 :(得分:3)
您需要在基类virtual
中创建方法,并且您的子类应该override
(而不是new
)。
public class BaseConverter : IValueConverter
{
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// do nothing in this dummy implementation
return null;
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// do nothing in this dummy implementation
return null;
}
}
public class CrazyConverter : BaseConverter
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ACrazyConverionOfTheValue(...);
}
}
修改:您可能还需要考虑重构这一点,要求通过使类和Convert
抽象来覆盖Convert
,如下所示:
public abstract class BaseConverter : IValueConverter
{
public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// do nothing in this dummy implementation
return null;
}
}