可以使用lambda函数覆盖方法

sip*_*wiz 3 c# lambda

有没有办法用lambda函数覆盖一个类方法?

例如,具有类的定义

class MyClass {  
    public virtual void MyMethod(int x) {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何要做:

MyClass myObj = new MyClass();
myObj.MyMethod = (x) => { Console.WriteLine(x); };
Run Code Online (Sandbox Code Playgroud)

dah*_*byk 6

克里斯是对的,方法不能像变量一样使用.但是,你可以这样做:

class MyClass {
    public Action<int> MyAction = x => { throw new NotImplementedException() };
}
Run Code Online (Sandbox Code Playgroud)

允许覆盖操作:

MyClass myObj = new MyClass();
myObj.MyAction = (x) => { Console.WriteLine(x); };
Run Code Online (Sandbox Code Playgroud)


eul*_*rfx 5

不会.但是,如果您首先将该方法声明为lambda,则可以设置它,但我会尝试在初始化时执行此操作.

class MyClass {  
    public MyClass(Action<int> myMethod)
    {
        this.MyMethod = myMethod ?? x => { };
    }

    public readonly Action<int> MyMethod;
}
Run Code Online (Sandbox Code Playgroud)

但是,除非接口指定了lambda属性,否则无法实现声明了MyMethod的接口.

F#有对象表达式,允许你用lambdas组成一个对象.我希望在某些时候这是c#的一部分.