C# - Silverlight - 动态调用方法

时间:2010-05-21 23:36:41

标签: c# delegates metaprogramming

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 个答案:

答案 0 :(得分:2)

这应该这样做。假设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对非公共方法的反映非常有限。

答案 1 :(得分:-1)

是的,您应该可以使用反射API执行此操作。

这就是你想知道的,对吧? :)