0

C#にClassLibraryプロジェクトがあり、すべての「プライベートクラス」(異なる名前空間の下)は、同じアセンブリ(プロジェクト)内で相互にアクセスできます。

Class1.cs
----------------------------
namespace MyClass1App
{
   private class Class1{}
}


Class2.cs
----------------------------
namespace MyClass2App
{
   private class Class2{}
}

これで、Class1()はClass2()クラスのインスタンスにアクセスして作成できます[たとえば... new MyClass2App.Class2()]。はい、これらのクラス(Class1()およびClass2())はアセンブリの外部からアクセスできません。これらのクラスが「内部」として作成された場合と同じ動作です。クラスレベルで適用した場合の「プライベート」および「内部」アクセス指定子の実際の使用/違いを理解するのを誰かが助けてくれますか?

ありがとう!

4

3 に答える 3

3

private名前空間レベルでクラスを宣言できないようにする必要があります。プライベートクラスは、別のクラスに埋め込まれている場合にのみ持つことができます。

これを行おうとするとエラーが発生します。

namespace MyApp
{
    private class Class1
    {
    }
}

これはエラーメッセージです:

名前空間で定義された要素は、private、protected、またはprotectedinternalとして明示的に宣言することはできません

于 2010-12-30T07:28:40.787 に答える
3

代替テキスト

通常のクラスの場合、適用できるのは適用のみpublicであり、internal他のアクセス修飾子は意味がありません。

ネストされたクラスは、すべてのアクセス修飾子タイプを持つことができます。

于 2010-12-30T07:31:30.757 に答える
1

アクセス修飾子(C#プログラミングガイド)

クラスまたは構造体のメンバーは、5種類のアクセスのいずれかで宣言できます。それらは、クラスや構造体自体のように、パブリックまたは内部にすることができます。クラスメンバーは、protectedキーワードを使用して保護されていると宣言できます。つまり、クラスをベースとして使用する派生型のみがメンバーにアクセスできます。保護されたキーワードと内部キーワードを組み合わせることにより、クラスメンバーを保護された内部としてマークできます。派生型または同じアセンブリ内の型のみがそのメンバーにアクセスできます。最後に、クラスまたは構造体のメンバーは、privateキーワードを使用してプライベートとして宣言できます。これは、メンバーを宣言するクラスまたは構造体のみがそのメンバーへのアクセスを許可されることを示します。

重複する質問: 内部アクセス修飾子とプライベートアクセス修飾子

于 2010-12-30T07:25:37.833 に答える