Прежде всего код в классе B неверен.
должно быть:
watcher.Changed +=OnChangedDerived;
Еще одна вещь с точки зрения ООП, у вас есть виртуальный метод в вашем базовом классе. Вы можете просто переопределить его в производном классе, если вы хотите настроить обработку событий в производном классе. Вам не нужно подписываться снова.
Пример кода:
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.
}
}
Надеюсь, это поможет.