.net 代表们明确地说;这";指针?

.net 代表们明确地说;这";指针?,.net,delegates,.net,Delegates,是否可以采用类似函数“F”的方法 对于像操作这样的代理 我模模糊糊地记得微软正致力于支持这种改编。但也许我记错了 编辑:我知道这在VS2008中无法编译: class C { public void F(int i); void G() { Action<C, int> test = this.F; } } C类{ 公共空间F(int i); void G(){ 动作测试=此值。F; } } 我只是想知道MS是否在BCL中提供了这样做的方法

是否可以采用类似函数“F”的方法

对于像
操作
这样的代理

我模模糊糊地记得微软正致力于支持这种改编。但也许我记错了

编辑:我知道这在VS2008中无法编译:

class C {
    public void F(int i);
    void G() {
        Action<C, int> test = this.F;
    }
}
C类{
公共空间F(int i);
void G(){
动作测试=此值。F;
}
}

我只是想知道MS是否在BCL中提供了这样做的方法,或者该功能是否会在未来的版本中添加。

最简单的方法可能是创建一个lambda,它接受
C
int
,并在
C
上调用
F
,传递
int

Action<C, int> test = (c, v) => c.F(v);
动作测试=(c,v)=>c.F(v);

您还可以为实例方法
C.F
创建一个所谓的开放委托,这与通常类型的委托“在其实例参数上关闭”不同。这将使用反射和方法来完成。虽然这会产生一个更“直接”的代表,但它很可能比您需要的更复杂。

您希望通过这一点实现什么?
var test=new Action(this.F)
做不到,它将实现什么?区别在于每次调用委托时都可以更改类C的实例。下面是一篇关于开放委托的不错的博文:这个“开放委托”正是我想要的。lambda解决方案不错,但理论上应该更慢,而且我希望获得尽可能高的性能(我是在运行时生成代码的,因此避免反射的复杂性无论如何都是不可能的)。由于这个问题很长时间没有得到回答,我最终采取了一种与我最初设想的截然不同的方法。
Action<C, int> test = (c, v) => c.F(v);