java - c#匿名接口实现
问题描述
这个问题我已经看过几次了,但我还是不明白。在Java中,我可以这样做:
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("Hello");
}
}).start();
在我看来,这是一种非常好的实现接口的方式,这些实现只使用一次。有没有办法在 C# 中做到这一点?我已经听说过委托,但这只能部分解决问题,因为我只能实现一种方法。如果我有多种方法,在 C# 中执行此操作的“正确”方法是什么?我必须为此实现另一个类吗?
提前致谢!-克里斯
编辑:我不想专门制作一个新线程。这是一个更普遍的问题,关于在 C# 中从 Java 执行匿名实现之类的正确方法。这不是关于那个具体的例子。
解决方案
执行此操作的一般方法是 C# 是创建自己的私有类。正如您所指出的,C#(委托/lambda)中的其他方法仅在接口只有一个方法(即 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 功能接口时最简单的转换:
爪哇:
@FunctionalInterface
interface ISomeInterface
{
void method();
}
void testMethod()
{
x = new ISomeInterface(){
@Override
public void method() { foo(); }
};
}
C#:
delegate void ISomeInterface();
void testMethod()
{
x = () =>
{
foo();
};
}
推荐阅读
- ajax - 在 .map() 内部进行 ajax 调用
- javascript - javascript:当窗口到达顶部时
- angular - 在角度中使用异步作为条件
- python-3.x - 请求某些 ip/域时出现意外错误
- ios - 如何在 Objective-C 中的 iOS 14 中以编程方式创建 UIButton?
- c# - Moq 具有嵌套属性但没有接口的对象
- reactjs - 在身份验证上下文 ReactJs 之前触发 HOC useEffect
- node.js - 如果不是表情符号,Node.js 会删除不和谐消息
- flutter - 我的 Flutter App 被 Apple Review 拒绝,说明此 5.2 知识产权 (5.2.3)
- bash - Bash - 如何检查字符串中的所有字母是否都是大写的