2016-07-01 5 views
0

В C#, как я могу создать динамический метод, который можно использовать для обработки события?Как создать динамический метод обработки события?

Вот это событие:

public event EventHandler<EventArgs> refresh; 

Вот метод:

public void Test() 
{ 

} 

Как динамически создать метод для обработки события обновления, так что динамический метод вызывает метод испытания ?

Метод испытания, приведенный выше, является примером метода, который должен быть вызван.

+0

Почему вы не можете просто подписаться на это событие и вызывать метод тестирования оттуда? – Kinetic

+0

Код предназначен для того, чтобы пользователи могли подписаться на события во время выполнения. Вышеупомянутый метод для вызова является лишь примером. – user3736648

+0

Итак, «обновление» - это событие из класса, а Test - это метод, который не является частью этого класса? – Kinetic

ответ

0

Ну, вы можете просто подписаться на мероприятие.

public class SomeClass 
{ 
    public event EventHandler<EventArgs> refresh; 
} 

public void Test() 
{ 
} 

void Main() 
{ 
    var some = new SomeClass(); 
    some.refresh += (sender, e) => Test(); 
    // or 
    some.refresh += Refreshed; 
} 

void Refreshed(object sender, EventArgs e) 
{ 
    Test(); 
} 
+0

Это то, что я хочу делать, но мне нужна помощь в том, как динамически создавать «обновленный» метод. – user3736648

+0

Разве вы не можете сказать нам, почему его нужно динамически создавать? – Kinetic

+0

Метод «Тест» является примером метода, который может быть вызван. Пользователь может выбрать любой метод, который должен быть вызван. Таким образом, он должен быть создан динамически. – user3736648

0

Если метод, который вы хотите вызвать это метод экземпляра в некотором классе и у вас есть экземпляр этого класса и имя метода, вы можете использовать Delegate.CreateDelegate() для создания делегата этого метода, а затем использовать лямбда, чтобы вызвать его в обработчик события:

static EventHandler<EventArgs> CreateHandler(object methodObject, string methodName) 
{ 
    var methodDelegate = 
     (Action)Delegate.CreateDelegate(typeof(Action), methodObject, methodName); 

    return (s, e) => methodDelegate(); 
} 

Использование может выглядеть следующим образом (предполагается, что Test находится в классе C):

refresh += CreateHandler(new C(), "Test"); 

refresh(this, EventArgs.Empty); 
+0

@downvoter Как вы думаете, что не так с этим ответом? – svick