c#sealed 和 Java 的 final 关键字在功能上有啥区别吗? [复制]

Posted

技术标签:

【中文标题】c#sealed 和 Java 的 final 关键字在功能上有啥区别吗? [复制]【英文标题】:Is there any functional difference between c# sealed and Java's final keyword? [duplicate]c#sealed 和 Java 的 final 关键字在功能上有什么区别吗? [复制] 【发布时间】:2011-01-05 08:32:39 【问题描述】:

可能重复:What is the equivalent of Java’s final in C#?

在 Java 中,final 不仅仅适用于一个类。

所以,我想知道:这两个关键字在功能上有什么区别吗?

谢谢,对于一个相对菜鸟的问题,我们深表歉意。

快速的 Google 搜索无法满足我的需求。

【问题讨论】:

复制:***.com/questions/1327544/… 你为什么不简单地比较一下文档? RTFM,嗯。好吧,让我们和平关闭这个Q。谢谢你们!我必须选择一个答案作为接受。 【参考方案1】:

Java 的 final 关键字等效于 C# 的 sealedreadonlysealed 关键字。

这三个中的两个在 Java 和 C# 中有些不同:

在 Java 中,方法默认是虚拟的,所以任何方法都可以声明为final 以防止它被覆盖。在 C# 中,方法默认不是虚拟的,因此唯一被覆盖的方法可以声明为sealed(以防止它们被进一步覆盖)

在 Java 中,任何变量或字段都可以声明为final,以防止在初始化后对其进行更改(并且,对于字段,在构造函数之外)。在 C# 中,可以将字段声明为 readonly,以获得完全相同的效果,但局部变量不能。请注意,Java 没有等效于 C# 的 const 关键字。 (C# 中的consts 是在编译时评估的,值是硬编码的,而不是被引用)

对于类,C# 的 sealed 类和 Java 的 final 类完全相同 (AFAIK)。

【讨论】:

@Matthew:这不是错字。 C# 对 sealed 关键字有两种不同的用法。在VB中,它们是NotInheritableNotOverridable 我觉得答案有些混乱,这就是为什么我认为这是一个错字。 sealed 是一个具有多种上下文含义的关键字(与许多关键字一样,包括finaldefaultusing 等)。 C# const 用于 Java 使用 static final 的许多地方;因此,我认为它应该列为等价物之一。 @Matthew:没有。 C# 中的 const 等同于 static final 我知道没有一对一的映射(final 也用于您列出的其他方式),这就是我说“很多地方”的原因。但是如果你有一个像private static final int MY_NUMBER = 3 这样的Java 常量(这当然很常见),我相信private const int MY_NUMBER = 0; 是到C# 的最佳映射;当然,您不能将静态与 C# 常量一起使用。所以const 最接近static final一些用法。【参考方案2】:

看看这个答案:What is the equivalent of Java’s final in C#?

【讨论】:

以上是关于c#sealed 和 Java 的 final 关键字在功能上有啥区别吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#中的Sealed和J#中的Final比较(转载)

Java入门系列之final

Java阻止继承(sealed,permits)

C#中sealed关键字

c#与java对比

Java学习