使用动态方法创建 Class

Create Class with Dynamic Methods

所以我基本上想做的是在 C# 中创建一个动态菜单框架。我基本上有一个菜单元素(此时只是一个上面有一些文本的矩形),它包含一个 DoAction() 方法。每当单击矩形时,此方法都是 运行。我想要的是能够在 运行 时间定义 DoAction 方法。因此,例如,我可以实例化一个菜单元素,其 DoAction() 方法执行函数 x(),然后实例化另一个菜单元素,其 DoAction() 方法执行函数 y()。我有的是这样的。

public class MenuElement {
    public void DoAction(); // method I want to be dynamic

    public MenuElement((text, height, width, etc), method myMethod){
        DoAction = myMethod;
    }
}

MenuElement m1 = new MenuElement(..., function x());
MenuElement m2 = new MenuElement(..., function y());

m1.DoAction(); // calls x()
m2.DoAction(); // calls y()

这是我在 Javascript 中知道如何做的事情,但我对 C# 不太熟悉,我怀疑 .Net 会让我比 JS 多经历一些困难将。从我正在阅读的内容来看,我将不得不使用代表?我找不到任何我可以真正轻松地遵循的教程。

使用动作-Class。在您的示例中,它将是:

public class MenuElement {
public Action DoAction; // method I want to be dynamic

public MenuElement((text, height, width, etc), Action myMethod){
    DoAction = myMethod;
}
}

MenuElement m1 = new MenuElement(..., new Action(() => {
// your code here
});

MenuElement m2 = new MenuElement(..., new Action(() => {
// your code here
));

m1.DoAction(); // calls x()
m2.DoAction(); // calls y()

有关详细信息,请参阅 MSDN

是的,代表是必经之路。您可以根据需要使用不同风格的代表 Action and Func。这是您要实现的目标吗?

public class MenuElement
{
    public MenuElement(string text, int height, int width, Action<object> myMethod)
    {
        DoAction = myMethod;
    }

    public Action<object> DoAction { get; private set; }
}

        MenuElement m1 = new MenuElement("text", 10, 20, (obj) => { Console.WriteLine("MenuElement1"); });
        m1.DoAction(null);


        Action<object> y = (obj) =>
        {
            Console.WriteLine("MenuElement2");
        };

        MenuElement m2 = new MenuElement("text", 10, 20, y);
        m2.DoAction(null); // calls y()