【问题标题】:Why is the sealed keyword not included in the list of access modifiers?为什么sealed关键字不包含在访问修饰符列表中?
【发布时间】:2011-03-31 11:34:33
【问题描述】:

我认为sealed 应该包含在 C# 语言的访问修饰符列表中。有人能说出它被排除在外的原因吗?

【问题讨论】:

  • 因为它与类继承有关?

标签: c# language-design access-modifiers sealed


【解决方案1】:

它不是访问修饰符,它与一个类是否可以被继承有关......

【讨论】:

  • 一个类,或者一个方法,或者一个属性
【解决方案2】:

访问修饰符定义可以访问方法或类,何时(即:private:只有类成员,@ 987654322@:其他所有人等)。将方法或类标记为sealed 意味着它不能被继承。它没有说明 access 本身。

正确地说:如果您使用sealed关键字,您仍然需要添加访问修饰符(除非默认访问修饰符适合您)。

您的困惑可能是因为这两个关键字似乎都与保护级别有关。这是真的,但我们没有保护修饰符的概念。 sealed 关键字被称为 sealed 修饰符,因为它修改了要被密封的类或方法。这就像一个布尔开关:一个类或方法要么是密封的,要么不是,不管它的访问修饰符如何。

为了增加混淆,存在 密封访问器,这意味着不允许派生访问器(gettor/settor)(C# 标准 10.7.5)。

【讨论】:

    【解决方案3】:

    因为如果你不能从一个类派生它并不意味着你不能访问它。

    【讨论】:

      【解决方案4】:

      以下所有有效的类定义都具有 sealed 类,但它们都有不同的访问级别,因此您可以看到 sealed 不是访问修饰符,因此 Microsoft 未将其列为访问修饰符:

      public sealed class MyPublicClass
      {
      }
      
      internal sealed class MyInternalClass
      {
      }
      
      private sealed class MyPrivateClass
      {
      }
      

      您必须相信 Microsoft 确实对他们创建的语言了解一两件事 :)

      【讨论】:

      • Anders Hejlsberg 构建了 c# 语言,他来自 Borland ;-)
      猜你喜欢
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2011-11-24
      • 2021-12-17
      • 2013-12-14
      • 2014-09-14
      相关资源
      最近更新 更多