如何在运行时创建新方法c#

本文关键字:新方法 创建 运行时 | 更新日期: 2023-09-27 18:01:15

我是在浏览器中接受javascript调用的创建者动态报告系统。

我有以下报告类,

    [ComVisible(true)]
    public class Report
    {
        public Report(IEnumerable<Action<object>> actions)
        {
            foreach (var action in actions)
            {
                //here i want to create new methods that are public and have method name as the action method name
            }
        }
    }

在主叫类中,我有

    public class caller{
          private void MyMethod(object obj){ //do something}
          report = new report(MyMethod);
    }

我需要做的是,在调用构造函数之后,报表类应该生成新的方法(COM可见(,并将其命名为MyMethod,在其中它应该调用原始的MyMethod

    public static MyMethod(object obj)
    {
    // in here it should invoke the actions[0].invoke(obj) 
    }

如何在运行时创建新方法c#

我建议您为每个操作及其名称创建一个字典,然后按名称在字典中查找该项。然后采取行动。

    Dictionary<string, Action<object>> _methodDictionary = new Dictionary<string, Action<object>>();
    public void Report(IEnumerable<Action<object>> actions)
    {
        foreach (var action in actions)
        {
            // you need to get your name somehow.
            _methodDictionary.Add(action.GetType().FullName, action);
        }
    }
    public void callMethod(string actionName, object itemToPass)
    {
        if(_methodDictionary.ContainsKey(actionName))
            _methodDictionary[actionName].Invoke(itemToPass);
    }