[编辑]
由于比原始帖子所需的复杂性要多一些——对此我深表歉意——我将尝试简化一些事情。
最初,我有一个看起来像这样的基类:
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,我同意向基类添加新接口并不是做事的最佳方式,但这就是这里发生的事情。)
[原帖]
我在我的一个类中覆盖方法时遇到了麻烦。有人从这个改变了基类的继承模型:
public class OurViewModel : IntlViewModelBase<OurResources>
对此:
public class OurViewModel : IntlViewModelBase<OurResources>, IValidatableObject
IValidatableObject 有一个方法签名,Validate()
:
IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
OurViewModel
有一个 Validate 方法,如下所示:
public bool Validate(ModelStateDictionary modelState)
...现在是更改后的情况:
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
与此同时,我的班级继承自OurViewModel
. 它使用new
关键字来实现自己的布尔版本的验证。
似乎我不再能够隐藏 Validate 方法,因为我的类没有实现 IValidatableObject。我现在覆盖该方法的正确方法是什么?