2012-05-15 3 views
0

Есть ли способ передать метод в качестве параметра, не зная ничего о методе заранее?Метод C# как параметр

Можно ли назвать Func<input, return> без знания параметра метода/типа возврата?

ответ

6

Ближе всего вы можете использовать Delegate - вызывающему нужно будет выбрать нужный тип делегата. Именно поэтому Control.Invoke использует Delegate вместо определенного типа делегата.

В качестве альтернативы, есть MethodInfo, как предлагает HackedByChinese. Какой из них вы должны использовать, зависит от того, чего вы пытаетесь достичь - каждый из них полезен в разных контекстах. Если вы пытаетесь описать метод, то MethodInfo, вероятно, лучший подход. Если вы пытаетесь представить вызываемое действие какого-либо типа (которое может принимать параметры и иметь возвращаемое значение), то делегат, вероятно, более полезен.

Если вы расскажете нам больше о том, чего вы пытаетесь достичь, мы сможем вам помочь.

+0

да, только что упомянул вас :) – Diego

4

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

См MethodInfo.

2

Для этого вам необходимо использовать делегат. Есть несколько сообщений в Stackoverflow, которые покрывают это.

Я предлагаю this, особенно Джон тарелочкам ответ

2

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

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

public virtual Y MyWrapperFunction<T,Y>(Func<T,Y> func, T param) 
    { 
     return func(param); 
    } 

Но имейте в виду - дженерики может дать вам все виды различных проблем;)

+0

Спасибо за replies.Basically Я пытаюсь передать метод в Exception обработчика обработчика, которая использует обработку исключений для корпоративной библиотеки 5. Я пытаюсь передать в него какой-либо метод, и теперь мне нужно создать столько методов, сколько у меня уже есть, просто используйте его. –

Смежные вопросы