MethodInfo и делегаты - PullRequest
       38

MethodInfo и делегаты

1 голос
/ 08 октября 2010

Я использую dotnet 2.0

Я знаю, что со значением EventInfo вы можете просматривать циклы по типам сборки и находить все методы, которые соответствуют определению делегата EventInfo (EventInfo.EventHandlerType)

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

Или я застрялделаем следующее:

public bool MethodInfoDelegateSearch( MethodInfo mi ) {
  System.Collections.Generic.List<Type> delegateTypes = new System.Collections.Generic.List<Type>();
  foreach ( Assembly a in AppDomain.CurrentDomain.GetAssemblies() )
    foreach ( Type t in a.GetTypes() ) {
      if ( t.IsSubclassOf( typeof( Delegate ) ) )
        delegateTypes.Add( t );
    }

  for ( int i = 0; i < delegateTypes.Count; i++ ) {
    Type t = delegateTypes[i];
    /*
     * here is where to attempt match the delegate structure to the MethodInfo
     * I can compare parameters or just attempt to create the delegate
     */
    try {
      Delegate.CreateDelegate( t, mi, true );
      return true;
    } catch {
    }
  }
  return false;
}

1 Ответ

0 голосов
/ 08 октября 2010

Звучит так, как будто вам нужно все циклически проходить. Вы говорите, что хотите найти всех «доступных» делегатов, которые будут работать. Функция, принимающая делегата, не имеет ссылок на методы, которые могут быть переданы ему, поэтому большой поиск будет единственным способом найти их все.

Вы можете сократить время, затрачиваемое на поиск, проверяя только типы с открытым / внутренним доступом.

...