用私有属性包装我自己的类数据

时间:2018-12-09 08:28:09

标签: c# list

我为我的应用程序数据做包装。但是首先,我的代码:

public class FakeData
{
    private List<User> users { get; set; }
    private List<Project> projects { get; set; }

    public FakeData()
    {
        users = new List<User>
        {
            //Some Data here
        };

        projects = new List<Project>
        {
            //Some data here
        };

    }

    public void Initialize() => context = new FakeData();
    public List<User> GetUsers() => context.users; //i get an error here

    private FakeData context { get; set; }

}

我想做的是包装FakeData()类。我想在此类中有私有列表和对象状态。为什么VS告诉我,类型List<User>比方法GetUsers()少可用?当我想仅通过访问公共方法访问对象并列出列表时,如何使其正确?

谢谢您的建议

编辑

感谢您的回答,真的很有帮助!

我想通过包装FakeData()类来获得的结果是不公开来自UsersProjects的公共财产。我只想通过将在FakeData类中编写的公共方法来访问它

3 个答案:

答案 0 :(得分:1)

即使在其他相同类型的实例中,也无法访问context的当前实例users属性。

如您所定义的users私有,则只能在context内部访问,而不能在其外部访问。

当您尝试访问users属性时。

FROM MSDN

  

私人访问权限是最低的访问权限级别。私有成员只能在类的主体或声明其的结构中访问

查看这些here

的更多示例

如果您不希望在课程之外修改set,则可以将public List<User> users { get; private set; } 更改为private:

users

现在,您的代码可以正常工作了,您可以阅读glBlendFunci属性。

答案 1 :(得分:1)

好像类User是不公开的,您需要更改它。原因:public的方法只能返回也是public的东西。

答案 2 :(得分:1)

为什么VS告诉我,类型List比方法GetUsers()少?

您需要修改User类以确保它是公共的,因此它至少与引用它的FakeData类一样可用。

public class User
{
}

当我想仅通过访问公共方法来访问对象和列表时,如何使其正确?

将您的媒体资源公开。

public class FakeData
{
    public List<User> Users { get; private set; }
    public List<Project> Projects { get; private set; }

    public FakeData()
    {
        Users = new List<User>
        {
            //Some Data here
        };

        Projects = new List<Project>
        {
            //Some data here
        };
    }
}