Eric Lippert によるこの非常によく書かれたブログ投稿を読みましたが、アクセシビリティ修飾子の特定のケースについて説明していません。
従来のスタックオーバーフローの知恵では、常に「プライベート」を明示的に指定するように言われています。これは、メンバーが修飾子を必要とする必要があることを意味します。
定義されていない場合、デフォルトの修飾子が設定されていないわけではありません。C# では、指定しなくても既定の修飾子が設定されます。プログラムを実行するための既定の修飾子 (意図した結果) を知りたい場合があります。
、、またははenum
、通常の条件 (名前空間内またはファイル内に単独で存在する場合) ではデフォルトになりますが、構造体またはクラス内で宣言された場合はデフォルトになります。struct
class
internal
private
すべてのメソッド、フィールド、およびプロパティには、デフォルトのアクセス修飾子が「Private」として設定されています。
おそらく、C# の設計者は、払い戻しアクセス修飾子を含めるかどうかについての「宗教的な」戦いを望んでいたのでしょうか?
(1 つのアクセス レベルのみが可能な場合、アクセス修飾子は通常許可されません。たとえば、インターフェイスまたは列挙型のメンバーは常に使用できますがpublic
、それを書き込むことはできません。partial
メソッドは常にprivate
使用できますが、それを書き込むことはできません。コンストラクターを明示的に呼び出すことはできないため、static
意味のあるアクセス レベルはありません. 明示的なインターフェイスの実装は、直接呼び出しでは実際には見えませんが、インターフェイスの型を介して自由にアクセスできます (インターフェイスの型が外部から見える場合)。アクセス修飾子はありません。)
あなたが提案するものとは反対のルールは、もちろん、何も変更しない修飾子を指定することは許可されていないというルールです。つまり、名前空間 (暗黙の「グローバル名前空間」を含む) の直接のメンバーを明示的に宣言できずinternal
、クラスまたは構造体 (ネストされた型を含む) のメンバーがキーワードを持てないことを意味しますprivate
。この規則を使用する人もいます。
プロパティとインデクサーのゲッターとセッターは冗長アクセス レベルを指定できないことに注意してください。ここで許可されるのは、2 つのアクセサーのうちの 1 つだけ (この場合は 2 つある必要があります) がより厳密なアクセスを指定することだけです。