MethodInfo и делегаты

Я использую дотнет 2.0

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

Есть ли способ узнать, какие доступные делегаты для данного MethodInfo могут быть назначены в функции 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;
}

person JDMX    schedule 07.10.2010    source источник


Ответы (1)


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

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

person John Fisher    schedule 07.10.2010