c# - 等效于 Java 1.6 @Override 用于 C# 中的接口(interface)

标签 c# java interface overriding

This question给出的答案是 Java 的 @Override 在 C# 中等效于方法上的 override 关键字。但是,从 Java 1.6 开始,@Override 注释也可以应用于接口(interface)。

这个的实际用途是,在 Java 中,当一个类声称它实现了一个接口(interface)方法而它不再实现时(例如,如果接口(interface)方法被删除),你会得到编译错误。 C# 中是否有等效的功能?

一些代码示例:

Java:

public interface A {
  public void foo();
  // public void bar(); // Removed method.
}

public class B implements A {
  @Override public void foo();
  @Override public void bar(); // Compile error
}

C#:

public interface IA {
  void Foo();
  // void Bar(); // Removed method.
}

public class B : A {
  public override void Foo(); // Doesn't compile as not 'overriding' method
  public void Bar(); // Compiles, but no longer implements interface method
}

最佳答案

类似的功能:显式接口(interface)实现。

public interface IA { 
  void foo(); 
  // void bar(); // Removed method. 
} 

public class B : IA { 
  void IA.foo() {}
  void IA.bar() {} // does not compile
} 

问题是,如果您这样做,您将无法通过 this 指针(从类内部)或通过计算结果为 B 的表达式来调用方法 - - 现在需要转换为 IA

您可以通过创建一个具有相同签名的公共(public)方法并将调用转发给显式实现来解决这个问题,如下所示:

public class B : IA { 
  void IA.foo() { this.foo(); }
  public void foo() {}
} 

然而,这并不是很理想,而且我从未见过它在实践中完成。

关于c# - 等效于 Java 1.6 @Override 用于 C# 中的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8936296/

相关文章:

c# - 如何过滤项目的子列表

c# - TreeView AfterExpand 事件有时不起作用 C#

c# - 如何检查HTTP请求是否是外部的

java - 如何使用java设置Excel工作表的密码

java - Guice3 Singleton 从未在 GAE 项目中实例化

java - Jboss Eap - mod_cluster - 防止 jboss 互相交谈

java - 如何正确返回从类扩展并实现接口(interface)的东西?

objective-c - 私有(private)接口(interface)与私有(private)方法 - objective-c

javascript - 使用 GET 将复杂的 JS 对象从 Angular 传递到 C# WebApi

java - 抽象类、构造函数和接口(interface)