将方法存储为类的成员变量

我把它作为我的’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;