为了账号安全,请及时绑定邮箱和手机立即绑定

什么是Java C#的最终版本?

什么是Java C#的最终版本?

aluckdog 2019-12-07 14:43:04
finalC#中的Java等效于什么?
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

该final关键字在Java中的几个用途。它取决于C#中的sealed和readonly关键字,具体取决于使用它的上下文。


班级

为了防止子类化(从已定义的类继承):


爪哇


public final class MyFinalClass {...}

C#


public sealed class MyFinalClass {...}

方法

防止重写virtual方法。


爪哇


public class MyClass

{

    public final void myFinalMethod() {...}

}

C#


public class MyClass : MyBaseClass

{

    public sealed override void MyFinalMethod() {...}

}

正如Joachim Sauer所指出的,这两种语言之间的显着区别是Java默认将所有非静态方法都标记为virtual,而C#将它们标记为sealed。因此,仅sealed当您要停止进一步重写已virtual在基类中显式标记的方法时,才需要在C#中使用关键字。


变数

仅允许一次分配变量:


爪哇


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

C#


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

作为边注,所述的效果readonly关键词不同于所述的const,所述关键字readonly表达在评价运行时,而不是编译时,因此允许任意表达式。


查看完整回答
反对 回复 2019-12-07
?
Qyouu

TA贡献1786条经验 获得超11个赞

这取决于上下文。


对于final类或方法,等效sealed于C#。

对于final字段,C#等效为readonly。

对于final局部变量或方法参数,没有直接的C#等效项。


查看完整回答
反对 回复 2019-12-07
?
智慧大石

TA贡献1946条经验 获得超3个赞

这里每个人都缺少的是Java对最终成员变量进行明确分配的保证。

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

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

因此,final和readonly(至少在成员变量方面)绝对不相等-final更为严格。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信