0

私の質問のトピックは少し紛らわしいと思います。要するに、私が欲しいもの:

私のアプリケーションにはたくさんあり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;
    }
}

そして、私のクレイジーなコンバーターの1つ:

public class CrazyConverter : BaseConverter
{
    public new object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       return ACrazyConverionOfTheValue(...);
    }
}

しかし、このように試して自分のを使うとCrazyConverter、いつものConvert方法になってしまいBaseClassます。私の新しいConvertメソッドは呼び出されません。私は何が間違っているのですか?

返信ありがとうございます!

4

1 に答える 1

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;
    }
}
于 2013-02-11T18:39:04.013 に答える