【发布时间】:2011-01-12 20:56:30
【问题描述】:
我的意思是,可以将 C# 中的虚方法标记为 final,这样从该类型派生的其他类型就不能再覆盖它了吗?
【问题讨论】:
-
出于好奇,您的用例是什么?这是一个很少使用的功能。你有什么场景需要密封 method 而不是 class?
-
@Eric:实际上我没有任何用例 :O 但发生的事情是这样的。我正在使用尚未发布的第 3 方 .NET 库。这个库有很多类型,它们只有内部构造函数。我想从这些派生出我自己的类型,但它的方式是不可能的,因为构造函数必须是公共的。我问他们,他们说虚拟方法会导致难以调试、棘手的错误,所以他们不能这样做。我隐约记得一种“最终确定”/密封虚拟方法的方法,所以这就是为什么我问这个,并告诉他们,如果他们担心,他们可以使用..
-
密封关键字来密封这些虚拟方法。还告诉他们如果继承不适用于他们的库,那么应该密封类型以提高性能。但是由于这些类型具有内部构造函数,因此不可能真正使用它们。你怎么看?您认为他们对继承和虚方法的担忧是否有效?
-
我的观点是可扩展性是一种特性,特性必须被设计、指定、实现、测试、记录、交付和维护。所有这些都增加了成本。您可以拥有一个未经过精心设计的可扩展类型,可能无法满足真正的客户需求,或者您可以花钱使其可适当扩展,或者您可以使其不可扩展。在预算有限的情况下,我个人倾向于选择第三种选择。
-
他们有一个带有不可访问构造函数的非密封类的原因可能是因为他们想在内部进行继承,这比让继承可用的设计、测试、文档和维护负担更低。上市。如果他们不这样做,那么我同意最好也密封类,以明确表明其意图是创建一个不可继承的类。