为什么hibernate不强迫你将字段标记为虚拟,但是nhibernate会这样做?
这是VM和CLR之间差异的结果吗?
答案 0 :(得分:6)
这不是运行时之间的区别 - 它是语言之间的区别。
在C#中,默认情况下方法不是虚拟的。在Java中,它们是。
请注意,两个平台都不允许字段是虚拟的,如您的问题中所述。
Hibernate和NHibernate都需要虚拟方法 - 这意味着在C#中使它们显式虚拟。
(请注意,在Java中,术语“虚方法”实际上并未在语言规范中定义;这里我使用它来表示“非最终”:可以覆盖的方法。)
答案 1 :(得分:2)
在Java中,默认情况下所有方法都是虚拟的。在.NET中,您需要将方法明确标记为虚拟。
答案 2 :(得分:1)
因为除非指定了final
关键字,否则Java中的默认行为是可覆盖的方法,而在.NET中,除非指定了virtual
关键字,否则方法是不可覆盖的。