sealed
C# 言語のアクセス修飾子のリストに含める必要があると思います。除外された理由を誰か教えてください。
4 に答える
アクセス修飾子ではなく、クラスを継承できるかどうかに関係しています...
クラスから派生できないからといって、アクセスできないわけではありません。
アクセス修飾子は、誰がいつメソッドまたはクラスにアクセスできるかを定義します (例: private
: クラス メンバーのみ、public
: 他の全員など)。メソッドまたはクラスを としてマークするsealed
ことは、継承できないことを意味します。アクセス自体については何も述べていません。
sealed
正しく言えば、キーワードを使用する場合は、アクセス修飾子を追加する必要があります(デフォルトのアクセス修飾子が適している場合を除く)。
あなたの混乱は、両方のキーワードが保護レベルに関するものであるように見えることについてかもしれません. これはある程度正しいのですが、保護修飾子という概念はありません。sealed
キーワードは、封印されるクラスまたはメソッドを変更するため、封印修飾子と呼ばれます。これはブール スイッチのようなものです。クラスまたはメソッドは、アクセス修飾子に関係なく、封印されているか、封印されていないかのいずれかです。
さらに混乱を招くのは、封印されたアクセサーが存在することです。これは、アクセサー (gettor/settor) の派生が許可されていないことを意味します (C# 標準 10.7.5)。
次のすべての有効なクラス定義はクラスを特徴としていますが、それらはすべて異なるレベルのアクセスを持っているため、これはアクセス修飾子ではなく、したがって Microsoft によってリストされていないsealed
ことがわかります。sealed
public sealed class MyPublicClass
{
}
internal sealed class MyInternalClass
{
}
private sealed class MyPrivateClass
{
}
Microsoft が作成した言語について 1 つまたは 2 つのことを知っていることを信頼する必要があります :)