событие, скрывающееся в унаследованном классе, не работает - PullRequest
4 голосов
/ 09 июля 2011

Я пытаюсь скрыть событие от унаследованного класса, но не через атрибут EditorBrowserable.У меня есть DelayedFileSystemWatcher , который наследуется от FileSystemWatcher , и мне нужно скрыть события Changed, Created, Deleted и Renamed и сделать их закрытыми.Я пробовал это, но это не работает:

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

Комментарий XML не отображается в IntelliSense (отображается исходная информация).Однако, если я изменю модификатор доступа на public, XML-комментарий будет показан в IntelliSense.

Любая помощь приветствуется.

Ответы [ 3 ]

4 голосов
/ 10 июля 2011

Вы не хотите использовать его, но это тривиально решает вашу проблему:

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..
}
2 голосов
/ 09 июля 2011

Если вы наследуете его, вы должны предоставить его.

Возможно, вместо того, чтобы наследовать:

Public Class DelayedFileSystemWatcher : Component
{
  private FileSystemWatcher myFSW;

  public DelayedFileSystemWatcher
  {
    myFSW = new FileSystemWatcher();
  }
}
0 голосов
/ 10 июля 2011

Нельзя сделать что-то общедоступное в базовом классе частным в производном классе. Если ничего другого, можно привести производный класс к базовому классу и использовать публичную версию.

Способ, которым вы скрываете событие базового класса, на самом деле работает, но только там, где видно новое событие, то есть внутри производного класса. Снаружи новое событие не отображается, поэтому к базовому классу обращаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...