C#中的替代内联接口实现

Vas*_*Doe 3 c# lambda interface

我想在C#中使用内联接口实现,但是读了一些这样的文章,我发现这不像Java。

假设此接口:

public interface MyListener {
    void onHandleOne();
    void onHandleTwo();
    }
Run Code Online (Sandbox Code Playgroud)

我将此接口作为参数传递:

   myMethod(MyListener listener){
    //some logic
   }
Run Code Online (Sandbox Code Playgroud)

当我调用它时,我想像在Java中那样进行内联实现:

myMethod(new MyListener () {
                    @Override
                    public void onHandleOne() {
                        //do work
                    }

                    @Override
                    public void onHandleTwo() {
                        //do work
                    }
                });
Run Code Online (Sandbox Code Playgroud)

另外,我制作了一个实现yhis接口的类,并使用该类来调用我的方法:

public class MyImplementor : MyListener  {
    public void onHandleOne() {
        //do work
        }

    public void onHandleTwo() {
        //do work
        }
    }
Run Code Online (Sandbox Code Playgroud)

并调用我的方法: myMethod(new MyImplementor()) 但是每次我要调用此方法(针对不同的行为)时,此解决方案都需要一个新的类,也许有一种方法可以使用lambda或以某种方式做到这一点:

myMethod(new MyImplementor() =>{//handle my methods})

Sri*_*vel 8

但是每次我要调用此方法(针对不同的行为)时,此解决方案都需要一个新的类,也许可以使用lambda或以某种方式实现

是的,给它一个委托参数,并给它一个lambda。

public class MyImplementor : MyListener  
{
    private readonly Action handle1;
    private readonly Action handle2;
    public MyImplementor(Action handle1, Action handle2)
    {
        this.handle1 = handle1;
        this.handle2 = handle2;
    }

    public void onHandleOne() 
    {
       handle1();
    }

    public void onHandleTwo()
    {
       handle2();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以将其用作

myMethod(new MyImplementor(()=>{//handle method1}, ()=>{//Handle method2}); 
Run Code Online (Sandbox Code Playgroud)