什么类型的类不能在.NET中继承?

时间:2012-03-01 05:29:41

标签: c# .net inheritance

什么类型的课程不能继承?为什么以及如何做到这一点?请举例说明。

还有哪些可能的方法来阻止派生类?

4 个答案:

答案 0 :(得分:6)

无法继承使用sealed(C#)或NotInheritable(VB.NET)关键字标记的类。这是在类的定义中完成的。最常用的密封类是System.String。

答案 1 :(得分:5)

显然,sealed关键字可以阻止任何人从类型派生。但您也可以通过更改构造函数的可见性来控制谁可以从您的类派生。如果声明所有构造函数内部(包括默认值),那么只能导出同一程序集中的其他类。如果你将它们声明为私有(同样,包括默认值),那么只有你的类中的嵌套类才能实现。

有一些特殊情况,例如System.DelegateSystem.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。