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})
但是每次我要调用此方法(针对不同的行为)时,此解决方案都需要一个新的类,也许可以使用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)
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |