[編集]
元の投稿で必要とされていたよりも少し複雑なため、申し訳ありませんが、物事を少し単純化しようとします。
もともと、次のような基本クラスがありました。
public class OurViewModel
{
public bool Validate(ModelStateDictionary modelState){...}
}
私のクラスは new キーワードを使用して、そのメソッドを継承して非表示にしました。
public class MyViewModel : OurViewModel
{
public new bool Validate(ModelStateDictionary modelState) {...}
}
一方、IValidatableObject インターフェイスが登場しました。
public interface IValidatableObject
{
IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
}
現在、OurViewModel も (悲しいことに) 変更されています。次のようになります。
public class OurViewModel : IValidatableObject
{
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) {..}
}
ここで行う必要があるのは、MyViewModel の Validate メソッドを再度非表示にすることですが、現在の配置でそれを行う方法がわかりません。これについて良い方法はありますか?
(FWIW、基本クラスに新しいインターフェイスを追加することは、物事を行うための最適な方法ではないことに同意しますが、ここで起こったことです。)
【原文】
クラスの 1 つでメソッドをオーバーライドするのに問題があります。誰かがベース クラスの継承モデルを次のように変更しました。
public class OurViewModel : IntlViewModelBase<OurResources>
これに:
public class OurViewModel : IntlViewModelBase<OurResources>, IValidatableObject
IValidatableObject には、次の 1 つのメソッド シグネチャがありValidate()
ます。
IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
OurViewModel
次のような Validate メソッドがありました。
public bool Validate(ModelStateDictionary modelState)
...そして今、これは変更後のものです:
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
一方、私のクラスはOurViewModel
. キーワードを使用してnew
、Validate の独自のブール バージョンを実装しました。
クラスが IValidatableObject を実装していないため、Validate メソッドを非表示にできなくなったようです。そのメソッドをオーバーライドする適切な方法は何ですか?