隐藏在继承类中的事件无效

时间:2011-07-09 19:13:13

标签: c# events inheritance

我正在尝试从继承的类中隐藏事件,但不是通过EditorBrowserable属性。 我有 DelayedFileSystemWatcher ,它继承自 FileSystemWatcher ,我需要隐藏已更改,已创建,已删除和已重命名的事件并将其设为私有。 我试过这个,但它不起作用:

    /// <summary>
    /// Do not use
    /// </summary>
    private new event FileSystemEventHandler Changed;

IntelliSense中未显示XML注释(显示原始信息)。但是,如果我将访问修饰符更改为public,则XML注释将显示在IntelliSense中。

欢迎任何帮助。

3 个答案:

答案 0 :(得分:4)

你不想使用它,但它很容易解决你的问题:

class MyWatcher : FileSystemWatcher {
    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
    private new event FileSystemEventHandler Changed;
    // etc..
}

你唯一能做的就是封装它。这是可行的,该课程没有那么多成员,你正在消除其中的几个:

class MyWatcher : Component {
    private FileSystemWatcher watcher = new FileSystemWatcher();
    public MyWatcher() {
        watcher.EnableRaisingEvents = true;
        watcher.Changed += new FileSystemEventHandler(watcher_Changed);
        // etc..
    }
    public string Path {
        get { return watcher.Path; }
        set { watcher.Path = value; }
    }
    // etc..
}

答案 1 :(得分:2)

如果你继承它,你必须提供它。

也许不是继承:

Public Class DelayedFileSystemWatcher : Component
{
  private FileSystemWatcher myFSW;

  public DelayedFileSystemWatcher
  {
    myFSW = new FileSystemWatcher();
  }
}

答案 2 :(得分:0)

您不能在派生类中将基类中的公共内容设置为私有。如果没有别的,可以将派生类强制转换为基类并使用公共版本。

隐藏基类事件的方式实际上是有效的,但仅限于新事件可见的位置,即来自派生类的内部。从外部看,新事件不可见,因此可以访问基类。