Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2013, 21:45   #1
Максим139
Пользователь
 
Регистрация: 20.02.2011
Сообщений: 80
По умолчанию Вызов метода из программы

Создал библиотеку для программы на c#. В этой библиотеке есть метод Timer_Tick. Хочу, что бы во время его выполнения внутри него вызывался другой метол, скажем Update. Как сделать так, чтобы пользователь мог создать в программе метод Update и его код выполнялся при вызове метода Update из библиотеки?
Заранее спасибо.
Максим139 вне форума Ответить с цитированием
Старый 25.05.2013, 21:54   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Как сделать так, чтобы пользователь мог создать в программе метод Update и его код выполнялся при вызове метода Update из библиотеки?
В такой формулировке - (почти) никак: библиотека скомпилирована ещё до того, как написали программу и о том, какой метод в программе как будет назван, естественно, не имеет ни малейшего представления. Существует механика рефлексии, которая позволяет перебрать имена всех методов всех классов приложения, но я сильно сомневаюсь, что Вам нужно что-то в этом духе.

Можете привести пример использования?
Код:
public static Update(){
  /*...*/
}
//...
Library.Timer myTimer = new Library.Timer();
myTimer.Timer_Tick(200); //Хочется, чтобы здесь вызвался Update
В таком случае можно сделать так:
Код:
public static Update(){
  /*...*/
}

class MyTimer : public Library.Timer {
  void Timer_Tick(int t){
    base.Timer_Tick(t);
    Update();
  }
}

//...
MyTimer myTimer = new MyTimer();
myTimer.Timer_Tick(200); //Update вызовется
Abstraction вне форума Ответить с цитированием
Старый 25.05.2013, 23:10   #3
Максим139
Пользователь
 
Регистрация: 20.02.2011
Сообщений: 80
По умолчанию

Это должно выглядеть примерно так:

Библиотека:
Цитата:
private void DrawTimer_Tick(object sender, EventArgs
{
Update();
/.../
}
Программа:
Цитата:
public void Update()
{
/.../
}
Максим139 вне форума Ответить с цитированием
Старый 26.05.2013, 00:22   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Вообще говоря, недостаточно данных. Сделайте метод Update() класса таймера библиотеки виртуальным, в программе создайте класс-наследник, перегружающий Update(), используйте в программе класс-наследник. Тогда метод DrawTimer_Tick будет наследоваться (то есть, будет исполняться код библиотеки), но вызывать будет Update как виртуальный метод, так что будет вызываться Update() из программы.
Следует заметить, что для этого класс таймера не должен быть sealed и любые данные-члены, к которым обращается Update программы, должны иметь уровень защиты protected и ниже.
Abstraction вне форума Ответить с цитированием
Старый 26.05.2013, 00:37   #5
Максим139
Пользователь
 
Регистрация: 20.02.2011
Сообщений: 80
По умолчанию

Отлично. Всё работает, спасибо =)
Максим139 вне форума Ответить с цитированием
Старый 26.05.2013, 00:47   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Ивент прикрутите к таймеру, вызывающая сторона подвяжется, а в тике вызвать, или просто калбэк.
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов метода с параметрами из Dll LISTAT C# (си шарп) 11 18.04.2013 11:26
вызов Java метода из c++ (JNI) Евгений643 Qt и кроссплатформенное программирование С/С++ 1 26.12.2011 00:58
Вызов метода в другом классе jec Общие вопросы C/C++ 8 31.12.2010 21:16
Вызов метода из метода kuzjma PHP 8 10.12.2010 02:38
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41