c#sealed和Java的final关键字之间是否有任何功能差异?

时间:2010-01-15 02:14:16

标签: c# java final sealed

  

可能重复:
  What is the equivalent of Java’s final in C#?

在Java中,final不仅适用于一个类。

所以,我想知道:两个关键字之间是否有任何功能差异?

谢谢你,对于一个相对noob的问题感到抱歉。

快速的Google搜索无法满足我的需求。

2 个答案:

答案 0 :(得分:24)

Java的final关键字相当于C#的sealedreadonlysealed关键字。

这三个中的两个在Java和C#中有所不同:

在Java中,默认情况下方法是虚拟的,因此可以声明任何方法final以防止它被覆盖。在C#中,默认情况下方法不是虚拟的,因此可以声明唯一被覆盖的方法sealed(以防止它们被进一步覆盖)

在Java中,可以声明任何变量或字段final以防止在初始化后更改它(对于字段,在构造函数外部)。在C#中,字段可以声明为readonly,但效果完全相同,但局部变量不能。请注意,Java没有等效的C#const关键字。 (C#中的const在编译时进行评估,并且值是硬编码的而不是被引用的)

对于类,C#的sealed类和Java的final类完全相同(AFAIK)。

答案 1 :(得分:5)