C#密封vs Java决赛
有人请告诉我以下使用sealed
不能编译的原因吗? 然而,如果我用final
替换sealed
并将其编译为Java,它就可以工作。
private sealed int compInt = 100; public bool check(int someInt) { if (someInt > compInt) { return true; } return false; }
这是因为Java中的final
意味着很多不同的东西,具体取决于你使用它的位置,而C#中的sealed
只适用于类和潜在的虚拟成员(方法,属性,事件)。
在Java final
中可以应用于:
- 类 ,这意味着该类不能被inheritance。 这相当于C#的
sealed
。 - 方法 ,这意味着无法在派生类中重写该方法。 这是C#中的默认值,除非您将方法声明为
virtual
并且在派生类中,可以防止再次使用sealed
其他派生类。 - 字段和变量 ,这意味着它们只能初始化一次。 对于字段,C#中的等效字段是
readonly
。
在C#
Sealed
只能应用于引用类型 ,并且对inheritance树有影响。
在实践中,标记为sealed
的类型保证是inheritance树中的最后一个“叶子”,或者简而言之,您不能从声明为sealed
的类型派生。
public sealed class Child : Base { } public class AnotherAgain : Child //THIS IS NOT ALLOWED { }
它不能应用于成员。
当乔伊有点不正确时,提格兰的回答并没有错。
首先,您可以查看此页面: 在C#中,Java的最终结果是什么? 。
sealed
关键字可以应用于class
, instance method
和property
但不能应用于变量或接口的方法。 sealed
类不能inheritance。 sealed
放置方法时,必须由公司override
。 每个struct
都是sealed
,因此不能inheritancestruct
。 检查此图片: