Java在C#中的最终效果是什么?

Java在C#中的final是什么?


final关键字在Java中有几种用法。 它对应于C#中的sealedreadonly关键字,具体取决于它使用的上下文。

防止继承(从定义的类继承):

Java的

public final class MyFinalClass {...}

C#

public sealed class MyFinalClass {...}

方法

防止重写virtual方法。

Java的

public class MyClass
{
    public final void myFinalMethod() {...}
}

C#

public class MyClass : MyBaseClass
{
    public sealed override void MyFinalMethod() {...}
}

正如Joachim Sauer指出的那样,这两种语言之间的显着差异在于,Java默认将所有非静态方法标记为virtual ,而C#则将它们标记为sealed 。 因此,如果您想停止进一步重写基类中显式标记为virtual的方法,则只需在C#中使用sealed关键字。

变量

只允许一次赋值一个变量:

Java的

public final double pi = 3.14; // essentially a constant

C#

public readonly double pi = 3.14; // essentially a constant

另外, readonly关键字的作用与const关键字的作用不同,因为readonly表达式是在运行时而不是编译时计算的,因此允许任意表达式。


这取决于上下文。

  • 对于final类或方法,C#等价物是sealed
  • 对于final字段,C#等价物是readonly
  • 对于final局部变量或方法参数,没有直接的C#等价物。

  • 这里的每个人都缺少的是Java对最终成员变量的明确赋值的保证。

    对于具有最终成员变量V的类C,通过C的每个构造函数的每个可能的执行路径都必须将V分配给一次 - 无法分配V或分配V两次或更多次将导致错误。

    C#的readonly关键字没有这样的保证 - 编译器非常乐意让readonly成员未被分配,或者允许您在构造函数中多次分配它们。

    所以,final和readonly(至少就成员变量而言)绝对不是等价的 - final是更严格的。

    链接地址: http://www.djcxy.com/p/17369.html

    上一篇: What is the equivalent of Java's final in C#?

    下一篇: Lombok IntelliJ IDEA Plugin: Use of var is disabled by default