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/