C # - Silverlight - Динамический вызов метода - PullRequest
1 голос
/ 22 мая 2010

Есть ли в C # способ вызвать метод, основанный на Enum и / или классе? Скажи, если бы я позвонил

Controller<Actions.OnEdit, Customer>(customer);

Могу я сделать что-то подобное?

public void Controller<TAction, TParam>(TParam object)
{
    Action<TParam> action = FindLocalMethodName(TAction);
    action(object);
}

private Action<T> FindLocalMethodName(Enum method)
{
    //Use reflection to find a metode with 
    //the name corresponding to method.ToString()
    //which accepts a parameters type T.
}

Ответы [ 2 ]

2 голосов
/ 22 мая 2010

Это должно сделать это. Предположим, obj - это объект, для которого вы хотите вызвать метод ...

var methodInfo = ( from m in obj.GetType().GetMethods()
                   where m.Name == method.ToString() && 
                         m.ReturnType == typeof(void)
                   let p = m.GetParameters()
                   where p.Length == 1 && 
                         p[0].ParameterType.IsAssignableFrom(typeof(T))
                   select m ).FirstOrDefault();

return (Action<T>)Delegate.CreateDelegate(typeof(Action<T>), obj, methodInfo);

Обратите внимание, что метод имеет , который должен быть общедоступным или настолько же доступным для отражающего кода, насколько это было бы без отражения, потому что Silverlight имеет очень ограниченное отражение закрытых методов.

0 голосов
/ 22 мая 2010

Да, вы должны быть в состоянии сделать это с помощью API отражений.

Это все, что ты хотел знать, верно? :)

...