【问题标题】:What type of classes cannot be inherited in .NET?什么类型的类不能在 .NET 中继承?
【发布时间】:2012-03-01 05:29:40
【问题描述】:

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

还有什么方法可以防止类被派生?

【问题讨论】:

  • 我认为 final 和 static 有帮助,但不确定它的工作原理。感谢所有帮助。
  • 请为您的问题添加上下文。目前听起来更像是“有哪些可能的方法来防止类被派生?”。
  • 我已将其添加到问题的最后部分
  • 我认为这个问题不值得反对。
  • @nawfal : 这是一个基本和新手的问题

标签: c# .net inheritance


【解决方案1】:

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

【讨论】:

  • 这是唯一的方法吗?或者你错过了什么?举一个在c#中密封的例子
【解决方案2】:

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

有一些特殊情况,例如 System.DelegateSystem.ValueType,它们具有公开可见的构造函数,但您不能从它们派生。

【讨论】:

    【解决方案3】:

    带有 sealedstatic 关键字的类,值类型几乎不能在所有情况下使用。 您也可以在 SW 上寻找类似的问题,例如 this

    【讨论】:

      【解决方案4】:

      来自 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多