Re: Найти метод при помощи Reflection
От: Pavel_Agurov Россия  
Дата: 24.06.08 11:26
Оценка:
T>Возникла необходимость при помощи Reflection вызвать метод из класса "<Module>".

здесь
Автор(ы): Агуров П.В.

При написании программ особенно важно не тратить время на поиск стандартных решений, а сосредоточиться на решении конкретной задачи, используя готовый эффективный код, разработанный и проверенный коллегой-программистом. В этой книге собраны лучшие рецепты и решения, которые пригодятся вам при разработке программ любой сложности и помогут создать действительно качественный и быстрый код. Вам не потребуется читать множество документации — ведь можно просто взять готовый пример. Книга будет полезна как разработчикам программ на С#, так и тем, кто переходит на язык С# с других языков программирования.
На компакт-диске размещены все исходные коды, приведенные в книге.


Вызвать метод по имени можно с помощью отражения (листинг 18). Можно даже вызвать private метод, указав соответствующие флаги поиска:

  Type someType = someInstance.GetType();
  MethodInfo mi = someType.GetMethod(
           "System.Windows.Forms.ISomeInterface.SomeMethod",
            BindingFlags.NonPublic | BindingFlags.Instance
    );
  if(mi != null)
  {
    mi.Invoke(someInsance, new object[]{});
  }


Листинг 18. Вызов метода по имени
using System;
using System.Reflection;

namespace FindMethod
{
  class Test
  {
    string name;

    Test (string name)
    {
      this.name = name;
    }

    public void ShowName()
    {
      Console.WriteLine(name);
    }

    static void Main()
    {
      // Создать экземпляр объекта
      Test t = new Test ("The name");
      // Получить метод, который хотим вызвать
      MethodInfo mi = typeof(Test).GetMethod("ShowName");
      // Вызвать
      mi.Invoke (t, null);
    }
  }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.