Можно ли использовать отражение, чтобы превратить строку в функцию в C #? - PullRequest
1 голос
/ 06 апреля 2011
public delegate void SimpleDelegate();

public void mycode()
{
string str = "myfunction"; 

/*somehow use reflection to turn str into myfunction so this will compile*/
SimpleDelegate simpleDelegate = new SimpleDelegate(str);

}

public void myfunction() { } 

Ответы [ 4 ]

3 голосов
/ 06 апреля 2011

Используйте отражение, чтобы получить метод:

GetType().GetMethod(str).Invoke(this, new object[0])
3 голосов
/ 06 апреля 2011

Найти информацию о методе

http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.aspx

Преобразовать его в делегат

http://msdn.microsoft.com/en-us/library/53cz7sc6.aspx

Edit - Вот небольшой фрагмент Linqpad, где я создал метод расширения для String для создания делегатов. Нет проверки ошибок!

void Main()
{
    var simpleDelegate = "test".CreateDelegate<Func<string>>(new Test());
    simpleDelegate().Dump();
}

class Test
{
    public string test() { return "hi"; }
}

public static class ExtensionMethods
{
    public static T CreateDelegate<T>(this string methodName,object instance) where T : class
    {
        return Delegate.CreateDelegate(typeof(T), instance, methodName) as T;
    } 
}
1 голос
/ 06 апреля 2011

Здесь вы узнаете, как это сделать: http://www.codeproject.com/KB/cs/C__Reflection_Tutorial.aspx

0 голосов
/ 06 апреля 2011

Вы можете использовать Reflection.Emit для создания кода, но это не займет строку.Другой альтернативой является CodeDOM , который может принимать строку.

Soultion

Вы можете использовать компилятор для сборки сборки и загрузки.Смотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...