jav*_*red 8 c# delegates initializer method-group
在下面的代码中,我必须声明方法,MdrResponseInterpreter static否则我有编译错误.
class.... {
private StandardBuilder _mdrResponseBuilder =
new StandardBuilder(MdrResponseInterpreter);
public static bool MdrResponseInterpreter(DNMessageDeliverer builder,
DNFieldSet message)
{
// .... work
}
Run Code Online (Sandbox Code Playgroud)
为什么?由于_mdrResponseBuilder不是静态的,我希望MdrResponseInterpreter应该能够访问this
Cod*_*aos 11
因为字段初始值设定项无权访问this/实例成员.如果要访问实例成员,请将初始化移动到构造函数.
规范说:
实例字段的变量初始值设定项无法引用正在创建的实例.因此,
this在变量初始化程序中引用是编译时错误
虽然您的代码没有显式引用this,但是this如果方法是实例成员,则委托转换的方法组会隐式引用.
要添加到CodeInChaos的答案(这是正确的),您只需将赋值移动到构造函数:
private StandartBuilder _mdrResponsBuilder;
public Foo() // Whatever your type is called
{
// Simpler syntax for creating a delegate, too. Just use a
// method group conversion...
_mdrResponsBuilder = MdrResponseInterpreter;
}
Run Code Online (Sandbox Code Playgroud)
编辑:以上假定这StandartBuilder是一个委托类型.如果它是一个构造函数接受委托类型的类型,那么你需要返回new StandartBuilder(MdrResponseInterpreter),但仍然在构造函数中.