Обертывание моих собственных данных класса с частными свойствами - PullRequest
0 голосов
/ 09 декабря 2018

Я делаю обертку для данных своего приложения.Но сначала мой код:

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()?Как сделать это правильно, когда я хочу получить доступ к объекту и спискам только публичными методами accces?

Спасибо за любые советы

РЕДАКТИРОВАТЬ

Спасибо за ваши ответы, это было действительно полезно!

Что я хочу получить, обернув свой класс FakeData(), так это не делаю публичные свойства из Users и Projects.Я хочу получить к нему доступ только с помощью открытых методов, которые я напишу в FakeData class

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Похоже, класс User не является публичным, вам нужно это изменить.Причина: метод public может возвращать только те вещи, которые также public.

0 голосов
/ 09 декабря 2018

Почему 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
        };
    }
}
0 голосов
/ 09 декабря 2018

Вы не можете получить доступ к свойству context текущего экземпляра users вне его, даже в другом экземпляре того же типа.

Поскольку вы определили users private, к нему можно получить доступ только изнутри.context, и вы не можете получить к нему доступ вне этого.

При попытке доступа к свойству users.

ОТ MSDN :

Частный доступ является наименее разрешающим уровнем доступа.Закрытые члены доступны только внутри тела класса или структуры, в которой они объявлены

См. Другие примеры этих здесь

Вы можете изменитьset в private, если вы не хотите изменять его вне класса:

public List<User> users { get; private set; }

Теперь ваш код будет работать нормально, и вы можете прочитать свойство users.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...