C# 事件隐藏在继承的类中不起作用

C# 事件隐藏在继承的类中不起作用,c#,events,inheritance,C#,Events,Inheritance,我试图对继承的类隐藏事件,但不是通过EditorBrowserable属性。 我有一个从FileSystemWatcher继承的DelayedFileSystemWatcher,我需要隐藏更改、创建、删除和重命名的事件,并将它们设置为私有。 我试过这个,但不起作用: /// <summary> /// Do not use /// </summary> private new event FileSystemEventHandler Cha

我试图对继承的类隐藏事件,但不是通过EditorBrowserable属性。 我有一个从FileSystemWatcher继承的DelayedFileSystemWatcher,我需要隐藏更改、创建、删除和重命名的事件,并将它们设置为私有。 我试过这个,但不起作用:

    /// <summary>
    /// Do not use
    /// </summary>
    private new event FileSystemEventHandler Changed;
//
///不要使用
/// 
私有新事件文件系统EventHandler已更改;
XML注释未在IntelliSense中显示(显示原始信息)。但是,如果我将访问修饰符更改为public,XML注释将以IntelliSense显示


欢迎任何帮助。

如果您继承了它,您必须提供它

也许不是继承:

Public Class DelayedFileSystemWatcher : Component
{
  private FileSystemWatcher myFSW;

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

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


隐藏基类事件的方式实际上是有效的,但只能从新事件可见的地方,即从派生类内部隐藏。从外部看,新事件不可见,因此可以访问基类。

您不想使用它,但它可以解决您的问题:

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..
}

难道改变不也是另外一回事吗。。。为什么不更改事件名称并进行检查呢?好吧,因为——如果您将事件声明为private——原始事件似乎以IntelliSense方式显示(从您的注释判断,原始信息显示),相反,将新事件声明为
public
,并至少获得适当的IntelliSense信息似乎有利于将它们声明为
private
。?在这种情况下,合成(has-a)比继承更好(除非您需要将类的实例传递给接受
FileSystemWatcher
作为参数的函数),否则这也是我的方法。如果您需要隐藏基类的成员,则不应该使用继承。