インターフェイスを明示的に実装するメソッドをオーバーライドするのに問題があります。
私は2つのクラスを持っています。と呼ばれる基本的なものとOurViewModel
、 と呼ばれる継承されたものMyViewModel
。それらは というメソッドを共有してValidate
おり、最近までメソッドの基本バージョンを次のように非表示にすることができました。
public class OurViewModel
{
public bool Validate(ModelStateDictionary modelState){ return true; }
}
public class MyViewModel : OurViewModel
{
public new bool Validate(ModelStateDictionary modelState) {return false;}
}
これはすべて数日前に変更されました。新しいインターフェースが現場に現れました--
public interface IValidatableObject
{
IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
}
続いて、OurViewModel も変更されました。私はこれを要求しませんでしたが、それは起こりました。クラスは次のようになります。
public class OurViewModel : IValidatableObject
{
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) {..}
}
MyViewModel でこの書き換えられた Validate メソッドをオーバーライドまたは非表示にする方法を理解するのに苦労しています。new
キーワードをメソッド シグネチャに配置しようとすると(最初に行ったように)、コンパイル エラーが発生します。Validate
また、明示的にインターフェイスを実装しているため、OurViewModel でメソッドを仮想として 宣言することもできません。
何をすべきか?IValidatableObject の署名を使用して MyViewModelに単純に再実装Validate
すると、OurViewModel の実装が非表示になりますか、それとも継承規則のために何らかの形で問題が発生するのでしょうか?