从基类调用派生类(从接口)中的函数



编辑:编辑以更好地关注问题。

如何在基类中从派生类调用方法。 我有几个从 BaseClass 继承的类。 所有派生类都实现 IValidation,因此都有一个 ValidateInput 方法的实现。

interface IValidation
{
    public void ValidateInput(string userInput);
}
Public BaseClass : ViewModelBase
public string UserInput
{
    get { return _UserInput; }
    set
    {
        if (value == _UserInput) return;
        _UserInput = value;
        RaisePropertyChanged(() => UserInput);
        //I want to call my validation method here
        //ValidateInput(UserInput);
        UserInputStream.OnNext(value); //UserInputStream is defined as readonly Subject<string> MyPropertyStream = new Subject<string>();
     }
}
public class DerivedCLassOne : BaseClass, IValidation
{
  public DoStuff
  {
       //subject Stream for UserInput
       UserInputStream
          .Throttle(TimeSpan.FromSeconds(1))
          .ObserveOn(Application.Current.MainWindow)
          .Subscribe(GetResults);
  }
  public async void GetResults(string userInput)
  {
      //do stuff
  }
  public void ValidateInput(string userInput)
  {
       //Do validation stuff
  }
}

因为从基类派生了 5 或 6 个不同的类,所以我可以在基类 (DerivedClassOne.ValidateInput( 中使用一个完全定义的路径来访问 ValidateInput 方法,因为根据发生的情况,派生类会有所不同。 因此,BaseClass 需要知道只在当前正在使用的派生类中使用 ValidateInput 方法,例如 UserInputStream.OnNext(value(;呼叫确实如此。

这可以通过 RX(反应式扩展(来完成吗?它是否有助于在基类上实现 IValidation?

您可以公开一个表示用户输入有效性的流:

class BaseClass 
{
    IObservable<bool> IsUserInputValid 
    { 
       get 
          { 
            return UserInputStream
                .Throttle(TimeSpan.FromSeconds(1))
                .Select(x => IsValid(x))
                .ObserveOn(Application.Current.MainWindow);
           }
     }
     private bool IsValid(string userInput) { return whether the input is valid }
 }

然后将提交按钮和验证消息绑定到 IsUserInputValid 属性。

我建议你看看伟大的反应式UI框架。

相关内容

  • 没有找到相关文章

最新更新