создать объект с вложенными классами

301
08 февраля 2017, 22:06

Мне надо в одном списке хранить как общие параметры, так и пользовательские параметры. Для этого я использую вложенные классы. Вот для примера

class Parameters
{
    public class UserParameters
    {
        string testUserParameters;
    }
    public class AllPrameters
    {
        string testAllParameters;
    }
}

но когда я создаю объект класса Parameters. Я не могу ему назначить параметры вложенных классов. Например testUserParameters

class Test
{
    static void x()
    {          
        Parameters g = new Parameters();        
    }         
}

что делать?

Если не понятно зачем я это делаю, поясняю. Мне надо хранить параметры программы в одном конфигурационном файле.

пример: допустим мне надо хранить сотрудников компании я в одном конфигурационном файле храню общие данные: количество сотрудников, количество отделов, название всех отделов... А также храню данные о каждом человеке. ФИО, отдел, возраст... И здесь я создаю объект когда мне нужны общие данные я в объекте заполняю только общие данные, а когда я заполняю данные на сотрудника я в объекте заполняю только данные на сотрудника и храню это в общем списке.

Answer 1

Вы подклассы описали, но и только, сами то их как члены класса объявите хотя бы для начала:

class Parameters
{
   public class UserParameters
   {   
      string testUserParameters;
   }
    public class AllPrameters
    {
       string testAllParameters;
    }
    public UserParameters up;
    public AllPrameters ap;
}
Answer 2

У членов ваших вложенных классов не выставлены модификаторы видимости. То есть по умолчанию они private. Соответственно вы не можете обращаться к этим членам извне, в том числе и из внешнего класса Parameters (внешний класс не имеет доступа к приватным членам внутреннего, тогда как внутренний может обращаться к закрытым членам внешнего класса).

А вообще возникает вопрос необходимости вложенных классов в данном случае. Вложенные классы - это довольно специфическая сущность, и реальная необходимость в них возникает нечасто. Попробуйте сами себе ответить на вопрос: что именно в вашем случае можно реализовать (или проще реализовать) с помощью вложенных классов, но нельзя с помощью обычных, не вложенных? Подозреваю, что ничего

Answer 3

Не совсем понимаю зачем делать вложенные классы, точнее какую выгоду вы от этого получите.

В вашем случае я бы сделал так :

public class UserParameters
{
    public string testUserParameters { get; set; }
}
public class AllPrameters
{
    public string testAllParameters { get; set; }
}
public class Parameters
{
    public Parameters()
    {
        userParameters = new UserParameters();
        allPrameters = new AllPrameters();
    }
    public UserParameters userParameters;
    public AllPrameters allPrameters;
}

//вызов

Parameters g = new Parameters();
g.userParameters.testUserParameters = "test";
Answer 4

Вы говорите про список, не подойдет ли вам IDictionary? То есть пары имя/значение для параметров.

class Parameters {
    IDictionary<string, string> _userParameters;
    IDictionary<string, string> _allParameters;
    //...
}

UPD:

Во-первых, сейчас у вас нет списков.

Во-вторых, зачем вам внутренние классы? Их обычно используют для сокрытия каких-то сервисных типов внутри публичного типа. Если нужна аггрегация, то это делается иначе - через членство экземпляров одного типа в другом. (это не JavaScript)

В-третьих, нет прямой зависимости "один тип - один файл", родственность для (де)сериализации выражается через аггрегацию.

class A { }
class B { }
class C {
    public A a { get; set; }
    public B b { get; set; }
}
var jsonData = File.ReadAllText("myFile.json");
var c = JsonConvert.DeserializeObject<C>(jsonData);
READ ALSO
Сериализация double в JSON

Сериализация double в JSON

У класса есть свойство типа double, как задать, чтобы оно сериализовалось с конкретным количеством знаков после запятой?

413
ReSharper и VS: страдает перерисовка интерфейса

ReSharper и VS: страдает перерисовка интерфейса

Подлагивает интерфейс Visual Studio с установленным R#

298
Yii2, выборка записей с предпоследней

Yii2, выборка записей с предпоследней

Добрый день! Подскажите, пожалуйста, как решить такую задачу, мне нужно выводить записи в ListView начиная с предпоследней опубликованной, последнюю...

415
Как в PHP сохранять COOKIES при навигации по сайту для последующих автоматизированных HTTP-запросов?

Как в PHP сохранять COOKIES при навигации по сайту для последующих автоматизированных HTTP-запросов?

Задача: пользователь ходит через popup-окно по определенному сайту и в определенный момент нажимает в этом окне кнопку Сохранить cookies - после...

314