什么类型的课程不能继承?为什么以及如何做到这一点?请举例说明。
还有哪些可能的方法来阻止派生类?
答案 0 :(得分:6)
无法继承使用sealed
(C#)或NotInheritable
(VB.NET)关键字标记的类。这是在类的定义中完成的。最常用的密封类是System.String。
答案 1 :(得分:5)
显然,sealed关键字可以阻止任何人从类型派生。但您也可以通过更改构造函数的可见性来控制谁可以从您的类派生。如果声明所有构造函数内部(包括默认值),那么只能导出同一程序集中的其他类。如果你将它们声明为私有(同样,包括默认值),那么只有你的类中的嵌套类才能实现。
有一些特殊情况,例如System.Delegate和System.ValueType,它们具有公开可见的构造函数,但您无法从它们派生。
答案 2 :(得分:2)
具有密封或静态关键字的类,在几乎所有情况下都不能使用valuetypes。 您也可以在SW上查找类似的问题,例如this
答案 3 :(得分:1)
来自MSDN的Abstract and Sealed Classes and Class Members (C# Programming Guide):
public sealed class D
{
// Class members here.
}
密封类不能用作基类。因此,它也不能是一个抽象类。密封类可防止派生。因为它们永远不能用作基类,所以一些运行时优化可以使调用密封类成员的速度稍快。
这是来自MSDN的MustInherit and NotInheritable Classes
NotInheritable Class A
End Class
Class B
' Error, a class cannot derive from a NotInheritable class.
Inherits A
End Class
NotInheritable类是一个无法从中派生另一个类的类。 NotInheritable类主要用于防止意外派生。
在此示例中,类B出错,因为它尝试从NotInheritable类A派生。类不能同时标记为MustInherit和NotInheritable。