c# 匿名接口实现
c# Anonymous Interface Implementation
这个问题我已经看过好几次了,但还是不明白。
在 Java,我可以这样做:
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("Hello");
}
}).start();
在我看来,这是实现仅使用一次的接口的一种非常好的方式。有没有办法在 C# 中执行此操作?
我已经听说过委托,但这只能部分解决问题,因为我只能实现一种方法。如果我有多种方法,"right" 在 C# 中执行此操作的方法是什么?我必须为此实施另一个 class 吗?
提前致谢!
-克里斯
编辑:
我不想专门创建一个新线程。这是一个更普遍的问题,关于在 C# 中从 Java 执行匿名实现之类的正确方法。这不是关于那个具体的例子。
可能您以前搜索过这个,现在答案是:没有。现在在 C#
但我认为您的主要问题是 为什么?
简答:它可以在下一个 C# 版本中设计为一个特性。绝对可能.
长答案:如果您想了解更多关于为什么它还没有添加到 C# 的详细信息; Roslyn (an open-source .Net complier) page at GitHub. Check it out: https://github.com/dotnet/roslyn/issues/13
中这个确切的 功能请求 下面有一个有用的对话
C# 执行此操作的一般方法是创建您自己的私有 class。如您所述,C# 中的其他方法 (delegate/lambda) 仅在接口只有一种方法(即 Java 功能接口)时才有效:
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函数式接口时最简单的转换:
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,我可以这样做:
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("Hello");
}
}).start();
在我看来,这是实现仅使用一次的接口的一种非常好的方式。有没有办法在 C# 中执行此操作? 我已经听说过委托,但这只能部分解决问题,因为我只能实现一种方法。如果我有多种方法,"right" 在 C# 中执行此操作的方法是什么?我必须为此实施另一个 class 吗?
提前致谢! -克里斯
编辑: 我不想专门创建一个新线程。这是一个更普遍的问题,关于在 C# 中从 Java 执行匿名实现之类的正确方法。这不是关于那个具体的例子。
可能您以前搜索过这个,现在答案是:没有。现在在 C#
但我认为您的主要问题是 为什么?
简答:它可以在下一个 C# 版本中设计为一个特性。绝对可能.
长答案:如果您想了解更多关于为什么它还没有添加到 C# 的详细信息; Roslyn (an open-source .Net complier) page at GitHub. Check it out: https://github.com/dotnet/roslyn/issues/13
中这个确切的 功能请求 下面有一个有用的对话C# 执行此操作的一般方法是创建您自己的私有 class。如您所述,C# 中的其他方法 (delegate/lambda) 仅在接口只有一种方法(即 Java 功能接口)时才有效:
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函数式接口时最简单的转换:
Java:
@FunctionalInterface
interface ISomeInterface
{
void method();
}
void testMethod()
{
x = new ISomeInterface(){
@Override
public void method() { foo(); }
};
}
C#:
delegate void ISomeInterface();
void testMethod()
{
x = () =>
{
foo();
};
}