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# 的 sealed
、readonly
和 sealed
关键字。
这三个中的两个在 Java 和 C# 中有些不同:
在 Java 中,方法默认是虚拟的,所以任何方法都可以声明为final
以防止它被覆盖。在 C# 中,方法默认不是虚拟的,因此唯一被覆盖的方法可以声明为sealed
(以防止它们被进一步覆盖)
在 Java 中,任何变量或字段都可以声明为final
,以防止在初始化后对其进行更改(并且,对于字段,在构造函数之外)。在 C# 中,可以将字段声明为 readonly
,以获得完全相同的效果,但局部变量不能。请注意,Java 没有等效于 C# 的 const
关键字。 (C# 中的const
s 是在编译时评估的,值是硬编码的,而不是被引用)
对于类,C# 的 sealed
类和 Java 的 final
类完全相同 (AFAIK)。
【讨论】:
@Matthew:这不是错字。 C# 对sealed
关键字有两种不同的用法。在VB中,它们是NotInheritable
和NotOverridable
我觉得答案有些混乱,这就是为什么我认为这是一个错字。 sealed
是一个具有多种上下文含义的关键字(与许多关键字一样,包括final
、default
、using
等)。 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 关键字在功能上有啥区别吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章