-2

任意の名前空間でプライベートクラスを作成すると、コンパイルエラーが発生しますが、プライベートクラスを別のクラスのネストされたクラスとして作成すると、正常にコンパイルされます。別の男が、名前空間でプライベートを宣言するときにエラーが発生した理由を説明しましたか?彼は言った:

クラスを名前空間に対してプライベートにすることは、意味のあるレベルの保護を実現しません。世界中のアセンブリは、単にdllを参照し、おそらくプライベートクラスにアクセスする名前空間にコードを書き始めることができます。それがおそらくあなたの答えだと思います。 Microsoftから入手してください。

私はこの文を本当に理解していません"start writing code in your namespace which accesses your supposedly private classes"

どうすれば私のプライベートクラスにアクセスできますか?誰でも私にこれを言うことができます"start writing code in your namespace which accesses your supposedly private classes"

4

2 に答える 2

2

次のように記述したDLLが1つあるとします。

// hypotetical code !
namespace My.Namespace
{
    private class MyClass
    {
    }
}

これにより、このクラスは名前空間でのみ使用できることを宣言しますMy.Namespace。このクラスをその名前空間の内部にし、フォームが外部で使用されている場合は保護します。

これで、誰でも上記のDLLを参照する別のDLLを作成し、同じ名前空間を宣言して、とにかくMy.Namespace実際に使用できるようになります。MyClass同じ名前空間にあるため:

// hypotetical code !
namespace My.Namespace
{
    public class AnotherClass
    {
        private hisClass = new MyClass();
    }
}

この場合、プライベート修飾子はどのように使用されますか?

于 2013-03-20T12:24:23.007 に答える
0

次のシナリオを想像してみてください。

A.dll名前空間を使用してアセンブリを記述しますMou.MyStuff。その名前空間には、プライベートクラスがありSomeClassます。そのprivate可視性に基づいて、そのクラスは誰に見えるべきですか?同じ名前空間内の他のタイプにのみ?

次に、他の誰かが自分のアセンブリを作成できますB.dll。そのアセンブリではSomeOtherClass 、名前空間にクラスをMou.MyStuff定義できます。彼らがあなたとまったく同じ名前空間を使用することを妨げるものは何もないので、あなたの「プライベート」タイプにアクセスすることへの障害はまったくありません。

探しているのがアセンブリ内の可視性のみである場合は、internal可視性を使用します。

于 2013-03-20T13:06:22.537 に答える