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);
}
}
}