文件更改时在派生类中调用函数

问题描述 投票:0回答:1

我有:

protected FileSystemWatcher watcher = new FileSystemWatcher();
public A()
{
   ...
    watcher.Changed += OnChanged;
}
protected virtual void OnChanged(object source, FileSystemEventArgs e)
{
  //do stuff
}

我需要在派生类调用fonction的文件发生更改时,我尝试过:

public B():A
{
   watcher.Changed +=OnChangedDerived;
}


void OnChangedDerived(object source, FileSystemEventArgs e)
{
  //do more stuff
}

但它不会在派生类中调用该函数

c# inheritance filesystemwatcher
1个回答
1
投票

首先,B类代码不正确。

它应该是:

 watcher.Changed +=OnChangedDerived;

从OOP的角度来看,还有一件事,你的基类中有一个虚方法。如果要在派生类中自定义事件处理,则可以在派生类中覆盖它。您无需再次订阅它。

代码示例:

public class BaseClass 
{
    protected FileSystemWatcher watcher = new FileSystemWatcher();

    public BaseClass()
    {
       ...
        watcher.Changed += OnChanged;
    }

    protected virtual void OnChanged(object source, FileSystemEventArgs e)
    {
      //do stuff
    }

}


public class DerivedClass : BaseClass
{
       protected override void OnChanged(object source, FileSystemEventArgs e)
       {
            //// your custom handling in the derived class.
       }
}

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.