C# 将方法存储为类的成员变量
我将此作为“KeyEvent”类的成员之一:C# 将方法存储为类的成员变量,c#,methods,delegates,member,C#,Methods,Delegates,Member,我将此作为“KeyEvent”类的成员之一: private delegate void eventmethod(); 建造商: public KeyEvent(eventmethod D) { D(); } 我要做的不是在那里调用D(),而是将该方法(D)存储为KeyEvent的成员变量,类似于: stored_method = D(); stored_method(); private Action CallBackFunction {get; set;} public
private delegate void eventmethod();
建造商:
public KeyEvent(eventmethod D)
{
D();
}
我要做的不是在那里调用D(),而是将该方法(D)存储为KeyEvent的成员变量,类似于:
stored_method = D();
stored_method();
private Action CallBackFunction {get; set;}
public KeyEvent(Action callback) {
CallBackFunction = callback;
}
稍后在KeyEvent的另一种方法中,执行如下操作:
stored_method = D();
stored_method();
private Action CallBackFunction {get; set;}
public KeyEvent(Action callback) {
CallBackFunction = callback;
}
我怎样才能做到这一点?您几乎已经拥有了代码。只需创建一个正确委托类型的成员字段,并将参数保存到该字段中,就像保存任何其他数据类型一样
private eventmethod MySavedEvent;
public void KeyEvent(eventmethod D) {
// Save the delegate
MySavedEvent = D;
}
public void CallSavedEvent() {
if (MySavedEvent != null) {
MySavedEvent();
}
}
两件事。。。PascalCase类型/delegate/etc(EventMethod)和camelCase参数(d,disymethod)。并重用框架提供的内容:
privateaction-hurr代码>您可以执行以下操作:
stored_method = D();
stored_method();
private Action CallBackFunction {get; set;}
public KeyEvent(Action callback) {
CallBackFunction = callback;
}
可通过以下方式进行实例化:
new KeyEvent(MyFunction);
其中MyFunction是该类中某个函数的名称
然后,KeyEvent类可以通过以下方式调用该函数:
CallBackFunction();
Action类还允许传入强类型参数,Func类可用于返回结果的方法。您需要的东西称为“第一类函数”
从版本3开始,C#支持匿名函数和lambda表达式
因此,您可以使用Func
,它表示接受类型为a的参数并返回类型为R的值的函数
来自维基
static Func<double, double> MakeDerivative(Func<double, double> f, double deltaX)
{
return (x) => (f(x + deltaX) - f(x - deltaX)) / (2 * deltaX);
}
static Func MakeDerivative(Func f,double deltaX)
{
申报表(x)=>(f(x+deltaX)-f(x-deltaX))/(2*deltaX);
}