Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将方法存储为类的成员变量_C#_Methods_Delegates_Member - Fatal编程技术网

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

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

我将此作为“KeyEvent”类的成员之一:

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);
}