有人能告诉我以下sealed的使用无法编译的原因吗?而如果我将sealed替换为final并将其编译为Java,则可以正常工作。

private sealed int compInt = 100;
public bool check(int someInt)
{
    if (someInt > compInt)
    {
        return true;
    }
    return false;
}

最佳答案

这是因为Java中的final取决于您使用它的地方,因此意味着许多不同的事情,而C#中的sealed仅适用于类和继承的虚拟成员(方法,属性,事件)。

在Java中,final可以应用于:

  • ,这意味着该类不能被继承。这等效于C#的sealed
  • 方法,这意味着该方法不能在派生类中被覆盖。这是C#中的默认设置,除非您将方法声明为virtual,并且在派生类中可以再次使用sealed防止进一步的派生类使用此方法。这就是为什么您在C#中看到的sealed成员比Java中的final成员少得多的原因。
  • 字段变量,这意味着它们只能初始化一次。对于字段,C#中的等效项是readonly
  • 关于c# - C#密封vs Java Final,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10170633/

    10-09 17:08