0

この中にカスタム applicationdata クラスがあり、userdata クラスなどのメンバー サブクラスを介してそのデータを分類したいと考えています。ただし、userdata クラスは、applicationdata クラス以外の場所でインスタンス化することはできませんが、applicationdata クラスを介してアクセスできるようにする必要があります。これは可能ですか?

説明するために、次のようなクラスにアクセスできるようにしたいと考えています: ApplicationData.UserData.SomeProperty

ただし、ApplicationData クラスの外では、次のようにインスタンス化することはできません。 Dim ud as new UserData

4

4 に答える 4

3
public class ApplicationData
{
    private UserData user = new UserData();

    public UserData User
    {
        get
        {
            return user;
        }
    }

    public class UserData
    {
        internal UserData()
        {
        }
    }
}

ApplicationData クラスの外部で UserData インスタンスを作成することはまだ可能ですが、同じアセンブリ内でのみ可能であるという点で、あなたが説明したとおりではありません。クラス (UserData) には、公開するプロパティ (User) とは異なる名前を付ける必要があることにも注意してください。

このようにクラスを入れ子にするのではなく、パブリック IUserData インターフェイスと内部 UserData クラスを用意する方法をとります。その後、ApplicationData クラスは、IUserData 型の UserData プロパティを公開できます。

于 2013-07-18T09:20:53.460 に答える
0

内部コンストラクターを使用するだけです。

アセンブリ外の誰もインスタンスを作成できません。

于 2013-07-18T09:20:24.907 に答える
0

これに取り組む方法は次のとおりです。 パブリック インターフェイス IUserData を記述します UserData にインターフェイス IUserData を実装させ、このクラスをプライベートにします ApplicationData は、タイプ IUserData の UserData という名前のプロパティを介してクラスを公開します

于 2013-07-18T09:16:48.740 に答える