有人能告诉我以下使用sealed
不能编译的原因吗?然而,如果我将 sealed
替换为 final
并将其编译为 Java,它就可以工作。
private sealed int compInt = 100;
public bool check(int someInt)
{
if (someInt > compInt)
{
return true;
}
return false;
}
最佳答案
那是因为 final
在 Java 中意味着很多不同的东西,这取决于你在哪里使用它,而 sealed
在 C# 中仅适用于类和继承虚拟成员(方法、属性、事件)。
在 Java 中 final
可以应用于:
- classes,表示该类不能被继承。这相当于 C# 的
sealed
。 - methods,这意味着该方法不能在派生类中被重写。这是 C# 中的默认设置,除非您将方法声明为
virtual
并且在派生类中,可以再次使用sealed
阻止进一步的派生类。这就是为什么您在 C# 中看到sealed
成员比在 Java 中看到final
成员少很多。 - 字段和变量,这意味着它们只能被初始化一次。对于字段,C# 中的等效项是
readonly
。
关于C# sealed 与 Java final,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10170633/