C # Запуск метода после завершения другого метода (определенного в сторонней DLL) - PullRequest
1 голос
/ 23 июля 2011

Это может попасть в категорию расширения метода, переопределения или полиморфизма (я новичок в C # и OO, так что простите, я все еще учусь :-)).

У меня есть приложение, использующее сторонний API.В API есть метод для щелчка правой кнопкой мыши + действия выбора в пользовательском элементе управления (элемент управления является средством просмотра изображений, где пользователь может щелкнуть правой кнопкой мыши и перейти к другому изображению, которое существует в родительской группе).

В моем ограниченном понимании я бы подумал, что одна из этих двух вещей должна была бы произойти (может ли быть выполнено одно или хорошее решение в воздухе!)

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

Спасибо !!

Ответы [ 3 ]

1 голос
/ 23 июля 2011

Поскольку вы не опубликовали никаких ссылок, я постараюсь описать некоторые способы.

  1. если есть событие

    CustomControl cc = yourCustomControl;
    cc.SelectionCompleted += (sender, args) => { YourMethod() };
    

    Это использует анонимный обработчик событий, использующий лямбду.

    Другой способ будет:

    public class Form1 : Form
    {
       public Form1()
       {
          this.cc.SelectionCompleted += HandlerSelectionCompleted;
       }
       public void HandlerSelectionCompleted(object sender, EventArgs e)
       {
          YourCustomMethod();
       }
    }
    
  2. есть метод для переопределения

    public class YourCustomControl : CustomControl
    {
       public override void Selection()
       {
          base.Selection(); // first call the original method
    
          // now do some custom stuff
       }
    }
    
0 голосов
/ 23 июля 2011

То, что вы описываете, является арендатором AOP-ориентированного программирования AOP. Если вы хотите использовать стороннюю библиотеку .NET, я бы порекомендовал PostSharp http://www.sharpcrafters.com/solutions/logging

0 голосов
/ 23 июля 2011

Вы не можете переопределить этот метод: это правильно, если он не защищен / виртуален / абстрактен, или если вы не можете наследовать от класса этого компонента.Вы можете найти в компоненте события и угадать (если нет никакой документации), какое событие вызывается после желаемого действия.И на самом деле выполнить код в этом дескрипторе события.

Могут быть и другие «хакерские» уловки, но я бы лично не стал делать что-то подобное, если бы не личная страсть, а сосредоточился бы на достижении архитектуры моей программы, чтобы соответствовать требованиям и поддерживать этот компонент,так много как я могу.

С уважением.

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