我正在尝试从继承的类中隐藏事件,但不是通过EditorBrowserable属性。 我有 DelayedFileSystemWatcher ,它继承自 FileSystemWatcher ,我需要隐藏已更改,已创建,已删除和已重命名的事件并将其设为私有。 我试过这个,但它不起作用:
/// <summary>
/// Do not use
/// </summary>
private new event FileSystemEventHandler Changed;
IntelliSense中未显示XML注释(显示原始信息)。但是,如果我将访问修饰符更改为public,则XML注释将显示在IntelliSense中。
欢迎任何帮助。
答案 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)
您不能在派生类中将基类中的公共内容设置为私有。如果没有别的,可以将派生类强制转换为基类并使用公共版本。
隐藏基类事件的方式实际上是有效的,但仅限于新事件可见的位置,即来自派生类的内部。从外部看,新事件不可见,因此可以访问基类。