67

違いは何ですか:

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

と:

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

では、 public classclassの違いは何でしょうか?

4

3 に答える 3

73

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

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

internal class Foo {}
于 2012-09-12T16:48:36.587 に答える
24

前者は次と同等です。

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

es とs のprivateメンバー(メソッド、プロパティ、フィールド、入れ子になったクラス、および入れ子になったs) と、s の直接のメンバーについては、非公開にできないため、すべての可視性はデフォルトで可能な限り最小に表示されます。classstructenuminternalnamespace

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

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

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

アクセス修飾子を明示的に記述し、コード内で何が起こっているのかを明確にする方が、より良いスタイルであると考えられることがよくあります。

于 2012-09-12T16:55:37.210 に答える
1

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

于 2012-09-12T16:48:26.427 に答える