gpt4 book ai didi

c# - C#中的替代内联接口(interface)实现

转载 作者:行者123 更新时间:2023-11-30 13:55:13 25 4
gpt4 key购买 nike

我想在 C# 中使用内联接口(interface)实现,但阅读了一些像这样的帖子后我发现它不像 Java 那样。

假设这个界面:

public interface MyListener {
void onHandleOne();
void onHandleTwo();
}

然后我将此接口(interface)作为参数传递:

   myMethod(MyListener listener){
//some logic
}

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

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

@Override
public void onHandleTwo() {
//do work
}
});

作为替代方案,我创建了一个实现 yhis 接口(interface)的类,并使用此类来调用我的方法:

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

public void onHandleTwo() {
//do work
}
}

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

myMethod(new MyImplementor() =>{//处理我的方法})

最佳答案

but this solutions needs a new class every time I'll call this method (for different behavior) maybe is there a way using lambda or somehow to do it like

是的,给它一个委托(delegate)参数并传递一个 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();
}
}

然后你就可以把它当作

myMethod(new MyImplementor(()=>{//handle method1}, ()=>{//Handle method2}); 

关于c# - C#中的替代内联接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com