0

我有一个自定义的应用程序数据类,我想通过成员子类对其数据进行分类,例如用户数据类。然而,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 实例 - 但只能在同一个程序集中。另请注意,您必须以不同于您公开的属性 (User) 的方式命名类 (UserData)。

而不是像这样嵌套类,我将采取的方法是拥有一个公共 IUserData 接口和一个内部 UserData 类。然后,您的 ApplicationData 类可以公开 IUserData 类型的 UserData 属性。

于 2013-07-18T09:20:53.460 回答
0

我解决这个问题的方法如下: 编写一个公共接口 IUserData 使 UserData 实现接口 IUserData 并使这个类成为私有 ApplicationData 将通过一个名为 UserData 的 IUserData 类型的属性公开该类

于 2013-07-18T09:16:48.740 回答
0

您可以将用户数据定义为抽象类,使其只能被继承,不能被实例化。有关更多信息,请参阅此链接

现在如果 UserData 和 ApplicationData 驻留在同一个程序集中,您可以使用“内部”关键字。当您对类使用 internal 关键字时,该类只能在同一个程序集中访问。程序集外部的类无法访问它。有关更多信息,请参阅此链接。

干杯!

于 2013-07-18T09:17:59.980 回答
0

只需使用内部构造函数。

程序集之外的任何人都无法创建实例。

于 2013-07-18T09:20:24.907 回答