java - C# 匿名接口(interface)实现

标签 java c# interface anonymous

我已经见过这个问题好几次了,但我还是不明白。 在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/

相关文章:

java - 如何在Hibernate中更新实体的某些字段?

c# - 响应式扩展源代码中的 NO_PERF 标志在做什么

java - 如何多次实现相同的接口(interface),但使用不同的泛型?

java - 从 Java 中的两个方法抽象代码,也许使用委托(delegate)?

c# - 如何从 Visual studio 2017 预览版 2 指定 Azure Function 的输出绑定(bind)?

java - 接口(interface)作为参数

java - 在 Spring 3 中使用@Autowired

java - 我一次运行多个异步任务,我只想关闭这三个任务中的一个

java - JDialog打开速度很慢

c# - 如何将 ListView 绑定(bind)到存储在 WPF 中单个 ViewModel 中的多个集合?