【发布时间】:2011-03-31 11:34:33
【问题描述】:
我认为sealed 应该包含在 C# 语言的访问修饰符列表中。有人能说出它被排除在外的原因吗?
【问题讨论】:
-
因为它与类继承有关?
标签: c# language-design access-modifiers sealed
我认为sealed 应该包含在 C# 语言的访问修饰符列表中。有人能说出它被排除在外的原因吗?
【问题讨论】:
标签: c# language-design access-modifiers sealed
它不是访问修饰符,它与一个类是否可以被继承有关......
【讨论】:
访问修饰符定义谁可以访问方法或类,何时(即:private:只有类成员,@ 987654322@:其他所有人等)。将方法或类标记为sealed 意味着它不能被继承。它没有说明 access 本身。
正确地说:如果您使用sealed关键字,您仍然需要添加访问修饰符(除非默认访问修饰符适合您)。
您的困惑可能是因为这两个关键字似乎都与保护级别有关。这是真的,但我们没有保护修饰符的概念。 sealed 关键字被称为 sealed 修饰符,因为它修改了要被密封的类或方法。这就像一个布尔开关:一个类或方法要么是密封的,要么不是,不管它的访问修饰符如何。
为了增加混淆,存在 密封访问器,这意味着不允许派生访问器(gettor/settor)(C# 标准 10.7.5)。
【讨论】:
因为如果你不能从一个类派生它并不意味着你不能访问它。
【讨论】:
以下所有有效的类定义都具有 sealed 类,但它们都有不同的访问级别,因此您可以看到 sealed 不是访问修饰符,因此 Microsoft 未将其列为访问修饰符:
public sealed class MyPublicClass
{
}
internal sealed class MyInternalClass
{
}
private sealed class MyPrivateClass
{
}
您必须相信 Microsoft 确实对他们创建的语言了解一两件事 :)
【讨论】: