web-dev-qa-db-ja.com

クラスとパブリッククラス

違いは何ですか:

namespace Library{
    class File{
        //code inside it
   }
}

そして:

namespace Library{
   public class File{
       //code inside it
   }
}

public classclassの違いは何ですか?

55
user1678541

publicを指定しないと、クラスは暗黙的にinternalになります。これは、クラスが同じアセンブリ内でのみ表示されることを意味します。 publicを指定すると、クラスはアセンブリの外部に表示されます。

internal修飾子を明示的に指定することもできます。

internal class Foo {}
61
driis

前者は次と同等です:

namespace Library{
    internal class File{
        //code inside it
   }
}

すべての可視性は、privateesおよびclasss(メソッド、プロパティ、フィールド、ネストされたクラス、ネストされたstructs)のメンバーの場合、enumの最小表示にデフォルト設定されます。 internalsの直接のメンバーの場合、namespaceはプライベートにできないためです。

internalは、同じアセンブリ内の他のコードがそれを見ることができることを意味しますが、他には何もありません(フレンドアセンブリとリフレクションの使用を除く)。

これには2つの理由があります。

  1. カプセル化を強化するために、とにかく可能な限り最小の可視性を使用して物事を意識的にする必要があります。
  2. デフォルトでpublicに設定されている場合、プライベートまたは内部のはずの何かを誤って公開してしまう可能性があります。誤って十分に見えないものを作成した場合、明らかなコンパイルエラーが発生し、修正します。誤って目に見えるものを誤って作成した場合、エラーとしてフラグが付けられず、後で修正するための重大な変更になるコードに欠陥が生じます。

多くの場合、アクセス修飾子を明示的にすること、コードを明確にすること、何が起こっているかがより良いスタイルと見なされます。

22
Jon Hanna

デフォルトでは、すべてのclasses(およびそれに関するすべてのタイプ)はinternalであるため、外部からアクセスできるようにするために(InternalsVisibleToAttributeなど)それらをpublicに明示的にします。

1
Anton Gogolev