C#中是否有类似于Java的@override注释的东西?

19

我在Java中使用过@Override,非常方便。C#中是否有类似的东西?


5
我不知道,你是指override关键字吗? - BoltClock
2
好的,抱歉,那真是一个非常愚蠢的问题。我一直在寻找一个注释,但没能找到。忘记了它是方法签名的一部分。对C#还有点陌生。 - xecaps12
1
C# 实际上是最先拥有 override 关键字的。它被证明非常有用,以至于 Java 将其作为注释添加了该特性。 - Gabe
4个回答

14

C#编译器提供了方法覆盖的编译时检查,包括检查方法是否按照您的意图实际进行了覆盖。您可以使用.NET中的override关键字指示应该被覆盖的方法。


6
没有 .Net 编译器。(你是指 C#) - SLaks

4

在C#中,要重写函数必须使用override关键字。

如果你使用override却没有匹配的virtualabstract基函数,你会得到一个编译器错误。

如果你不使用override,但有一个匹配的基函数,你会得到一个编译器警告(除非你添加new)。


2
在C#中,override关键字的含义与Java世界完全不同。在C#世界中,它的等价物是显式实现,但它有一个缺点
interface IShape
{
     void Display();
}

class Square : IShape
{
     void IShape.Display()
     {

     }
}

-3

不需要,是的。在C#中有一个override关键字和编译器会警告你“隐藏”一个方法,所以没有必要使用注释。因此,你可以直接在方法中使用“new”或“override”。

Java基本上使用注释来隐藏语言规范中的错误。

请完全阅读C#的语言规范。


1
为什么这是一个错误?现代编译器可以自己解决覆盖的任何问题。我发现它在自我记录方面非常有用,而且必须明确声明我的意图,这使我跟踪事物。但是它对于编译是否必要呢?并不是真的。 - drharris
1
C#编译器也没有这个功能,但要明确。无警告地覆盖是可能出现错误的情况。Java犯了一个错误,将所有内容默认为虚拟和自动覆盖,并引入了大量可能的错误。 - TomTom
1
那又怎样?;)只有绵羊没有意见,它们会被屠宰。我个人认为,如果你想要一种弱类型语言,就去找一种。否则...这是一个弱点。 - TomTom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接