C#クラスおよびメンバー(フィールド、メソッドなど)のデフォルトの可視性?


164

C#のさまざまな側面のデフォルトの可視性のリファレンスを見つけようとしています。クラスのタイプ、フィールド、メソッド、列挙型など

誰かがこれらのリストをデフォルトの可視性(つまり、接頭辞付き修飾子なし)とともに提供できますか?



8
私はそれを重複しているとは思わない...その質問は具体的です(これのデフォルトは何ですか?)、これは広いです(すべてのデフォルトは何ですか?)
WernerCD

回答:


266

あなたが探しているすべての情報はここここにあります(ありがとうRed Copsey):

最初のリンクから:

クラスと構造体の名前空間内で直接宣言されている(つまり、他のクラスまたは構造体の中にネストされていないこと)、パブリックまたは内部のいずれかになります。アクセス修飾子が指定されていない場合、デフォルトは内部です

...

ネストされたクラスと構造体を含む、クラスメンバーと構造体メンバーのアクセスレベルは、デフォルトではプライベートです

...

インターフェースのデフォルトは内部アクセスです。

...

デリゲートはクラスと構造体のように動作します。デフォルトでは、名前空間内で直接宣言された場合内部アクセスがあり、ネストされ場合はプライベートアクセスがあります


2番目のリンクから:

他の型にネストされていない最上位の型は、内部またはパブリックのアクセシビリティのみを持つことができます。これらのタイプデフォルトのアクセシビリティは内部です。

ネストされた型の場合:

デフォルトメンバーのアクセシビリティのメンバー
---------- ----------------------------
列挙型公開
クラスプライベート
インターフェース公開
構造プライベート

6
Reedの情報からのすばらしいコンパイルですが、そのようなアクセス修飾子がメソッドにも適用されることを指定するのを忘れていました。
Joel

4
@ジョエルどういう意味?彼は明らかに「メンバー」を述べています。メンバーはデータと動作であり、メソッドを含みます。
rism

vb.net開発者がこれを見ている場合、vbは異なります。vbクラスメンバーのデフォルトのスコープはPublicです。EnumメンバーもPublic。可能性が高いので、あなたのケースで明示的なスコープを使用することで混乱が少なくなるでしょう。それは、ある時点でc#開発者によって翻訳または読み取られるからです。vb.netでのコード生成では、残念ながらこれは行われません。
toddmo 2015年

デフォルトでは、クラス内のネストされたインターフェースは内部ではなくプライベートであることを付け加えます。
フランク・ブライス

13

MSDNから:

他のタイプにネストされていない最上位タイプはinternalまたはpublicアクセシビリティのみを持つことができます。これらのタイプのデフォルトのアクセシビリティはinternalです。


他の型のメンバーであるネストされた型は、次の表に示すように、アクセシビリティを宣言できます。

デフォルトのネストされたメンバーのアクセシビリティと許可されたアクセシビリティ修飾子

出典:アクセシビリティレベル(C#リファレンス)(12月6日、2017年)


9

デフォルトでは、クラスのアクセス修飾子はinternalです。つまり、同じアセンブリ内でクラスにアクセスできます。ただし、他のアセンブリからクラスにアクセスする場合は、クラスを公開する必要があります。


19
この情報はすでに他の回答に含まれていました。提供する追加情報がある場合、または他の回答が間違っていると思われる場合にのみ、質問、特にこのような古い質問に回答してください。とにかく、スタックオーバーフローへようこそ。
Gorpik

他のアセンブリからアクセスできるようにするために、クラスを必ずしも公開する必要はありません。InternalsVisibleToAttributeクラスを使用できます[assembly:InternalsVisibleTo("Friend1b")]
adam

0

デフォルトはprivateです。ネストされていない限り、クラスはinternalです。


1
列挙型はデフォルトでパブリックではありませんか?
ライアンピーターズ

4
@ジェイ:ネストされていない限り。@ライアン:いいえ、ネストされていない列挙型はデフォルトで内部にあります。
Jon Skeet、2010

2
@ライアン:列挙型メンバーはデフォルトでパブリックですが、列挙型自体は内部にあります。
リードコプシー2010

@ReedCopseyしかし、私が学んでいる本はそれを明確に述べていenum members are private by default, so to use them outside the enum we should declare them as publicます。本があなたの言うことと矛盾する理由を説明していただけますか?ありがとう。

@ user5794376(明らかに削除されたアカウント)が読んでいる本が何であれ、彼らが本に書いていることが真実である場合、すべての1つ星のレビューを与える必要があります。Microsoft Docsを見るだけで、列挙型メンバーはデフォルトでパブリックであることを知ることができます。そのため、列挙型メンバーは明示的にしないことが一般的です。
Rodney S. Foley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.