将方法存储为类的成员变量
我把它作为我的’KeyEvent’类的成员之一:
private delegate void eventmethod();
和构造函数:
public KeyEvent(eventmethod D) { D(); }
我想要做的不是在那里调用D(),我想将该方法(D)存储为KeyEvent的成员变量,所以类似于:
stored_method = D();
然后在另一个KeyEvent方法中,执行以下操作:
stored_method();
我怎样才能做到这一点?
你已经拥有了很多代码。 只需创建一个右代理类型的成员字段,并将参数保存到它,就像使用任何其他数据类型一样。
private eventmethod MySavedEvent; public void KeyEvent(eventmethod D) { // Save the delegate MySavedEvent = D; } public void CallSavedEvent() { if (MySavedEvent != null) { MySavedEvent(); } }
你可以这样做:
private Action CallBackFunction {get; set;} public KeyEvent(Action callback) { CallBackFunction = callback; }
哪个可以通过以下方式实例化:
new KeyEvent(MyFunction);
其中MyFunction是该类中某个函数的名称
然后,KeyEvent类可以使用以下命令调用该函数:
CallBackFunction();
Action类还允许传入强类型参数,Func类可用于返回结果的方法。
你想要的东西叫做“头等function” http://en.wikipedia.org/wiki/First-class_function
从版本3开始,C#支持匿名函数和lambda表达式。
所以你可以使用Func
代表一个带有A类参数并返回R类型值的函数
来自维基
static Func MakeDerivative(Func f, double deltaX) { return (x) => (f(x + deltaX) - f(x - deltaX)) / (2 * deltaX); }
public class KeyEvent { private eventmethod hurr; public KeyEvent(eventmethod D) { hurr = D; } public void SomeOtherMethod() { hurr(); } }
几件事…… PascalCase类型/委托/ etc(EventMethod)和camelCase参数(d,dIsMyMethod)。 并重用框架为您提供的内容: private Action hurr;