我已经见过这个问题好几次了,但我还是不明白。 在Java中,我可以这样做:
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("Hello");
}
}).start();
在我看来,这是实现仅使用一次的接口(interface)的非常好的方法。有没有办法在 C# 中做到这一点? 我已经听说过委托(delegate),但这只能部分解决问题,因为我只能实现一种方法。如果我有多种方法,在 C# 中执行此操作的“正确”方法是什么?我必须为此实现另一个类吗?
提前致谢! -克里斯
编辑: 我不想专门创建一个新线程。这是一个更普遍的问题,涉及如何在 C# 中执行 Java 的匿名实现之类的操作。这与特定示例无关。
最佳答案
C# 中执行此操作的一般方法是创建您自己的私有(private)类。正如您所指出的,C# 中的其他方法(委托(delegate)/lambda)仅在接口(interface)只有一种方法(即 Java 函数式接口(interface))时才有效:
Java:
void testMethod()
{
x = new ISomeInterface(){
@Override
public void method1() { foo(); }
@Override
public void method2() { bar(); }
};
}
C#:
void testMethod()
{
x = new ISomeInterfaceAnonymousInnerClass();
}
private class ISomeInterfaceAnonymousInnerClass : ISomeInterface
{
public void method1()
{
foo();
}
public void method2()
{
bar();
}
}
下面是涉及 Java 函数式接口(interface)时最简单的转换:
Java:
@FunctionalInterface
interface ISomeInterface
{
void method();
}
void testMethod()
{
x = new ISomeInterface(){
@Override
public void method() { foo(); }
};
}
C#:
delegate void ISomeInterface();
void testMethod()
{
x = () =>
{
foo();
};
}
关于java - C# 匿名接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51722348/