2

.Net dll を作成している場合、同じ名前空間を持つクラスを作成することにより、それを使用するプログラムでカプセル化を解除することは可能ですか?

たとえば、次のコードを含む DLL を考えてみましょう。

using System;

namespace MyDLL
{
    internal class MyClass
    {
        internal void Stuff()
        {
            ...
        }
    }
}

次にプロジェクトを作成し、DLL を参照するとしたら、次のようなことができますか?

using System;
using MyDLL;

namespace MyDLL
{
    public class TheirClass
    {
        MyClass exposedClass = new MyClass();
        exposedClass.Stuff();
    }
}

私は現在、ユーザーが継承できるようにしたいいくつかの抽象クラスを持つプロジェクトに取り組んでいますが、特定の機能のみを公開したいと考えています。

前もって感謝します。

4

1 に答える 1

4

いいえ、同じ名前空間を使用しても、データのカプセル化や可視性 (プライベート/保護/内部) に影響はありません。名前空間は C# のシンタックス シュガーであり、実際のクラス名は名前空間、名前、およびアセンブリ ID で構成されます。

したがって、特定のケースでは、フルネームでクラスを追加しても表示されMyDLL.TheirClass{TheirAssembly}ません(クラスは内部であり、新しいクラスはアセンブリ内でマークされていない他のアセンブリからのものであるため)。MyDLL.MyClass{MyDLL}TheirClassInternalsVisibleTo

于 2013-09-14T01:22:52.183 に答える