是否有可能创建一个只能作为另一个类的成员实例化的类,但仍然可以通过VB.NET中的公共访问?

时间:2013-07-18 09:11:27

标签: .net vb.net oop

我有一个自定义的applicationdata类,我想通过成员子类对其数据进行分类,例如userdata类。但是,userdata类不能在applicationdata类之外的其他地方实例化,但仍可通过applicationdata类访问。这可能吗。

为了说明我希望能够像这样访问这个类: ApplicationData.UserData.SomeProperty

但是在ApplicationData类之外,不应该像这样实例: Dim ud as new UserData

4 个答案:

答案 0 :(得分:3)

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

    public UserData User
    {
        get
        {
            return user;
        }
    }

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

这并不完全是你所描述的,因为它仍然可以在ApplicationData类之外创建一个UserData实例 - 但只能在同一个程序集中。另请注意,您必须以与您正在公开的属性(用户)不同的方式命名类(UserData)。

不是像这样嵌套类,而是采用的方法是使用公共IUserData接口和内部UserData类。然后,您的ApplicationData类可以公开IUserData类型的UserData属性。

答案 1 :(得分:0)

我要解决的问题如下: 编写公共接口IUserData 使UserData实现接口IUserData并将此类设为私有 ApplicationData将通过名为UserData的属性IUserData

公开该类

答案 2 :(得分:0)

您可以将用户数据定义为抽象类,以便它只能被继承,不能被实例化。有关详细信息,请参阅此link

现在,如果UserData和ApplicationData位于同一个程序集中,您可以使用'internal'关键字。当您对类使用internal关键字时,该类只能在同一个程序集中访问。程序集外部的类无法访问它。有关详细信息,请参阅此link.

Cheerss!

答案 3 :(得分:0)

只需使用内部构造函数。

程序集外部没有人能够创建实例。