Как статический класс может быть установлен как свойство?

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

public class DynamicVariableSheet
{
    public static class SendBackOptions
    {
        public static byte IsCancellingBrothersNode { get; set; }
    }

    public static class ForwardOptions
    {
        public static string SignForwardCompareType { get; set; }
        public static float SignForwardCompleteOrder { get; set; }
    }
}

Тогда DynamicVariableSheet будет свойством другого класса:

public class Runner
{
    public string RunnerName { get; set; }
    public DynamicVariableSheet DynamicVariableSheet { get; set; }
}

Я могу установить некоторое значение напрямую, используя этот код:

DynamicVariableSheet.SendBackOptions.IsCancellingBrothersNode = 1;

Но как я могу сделать переменную свойства для установки значения в класс Runner, как этот код.

var runner = new Runner();
runner.AppName = "Order";
runner.DynamicVariableSheet.SendBackOptions.IsCancellingBrothersNode = 1;

Свойство public DynamicVariableSheet DynamicVariableSheet ожидает и экземпляр класса DynamicVariableSheet, но статический класс не имеет экземпляров, поэтому вы не можете этого сделать. Можете ли вы объяснить, почему вы попали в эту ситуацию? Какую именно проблему вы пытаетесь решить?

Chetan 09.04.2019 09:47

Так вы хотите, чтобы он был статичным или нет? Если вы сделаете его статическим, вы не сможете использовать runner.DynamicVariableSheet.... Если он не статичен, вы не можете установить его напрямую.

Sweeper 09.04.2019 09:47

пожалуйста, опишите мысль, стоящую за вашим подходом, какова цель наличия DynamicVariableSheet в качестве свойства в классе бегунов? Вы хотите индивидуальное значение для каждого Runner? или вы намерены иметь одинаковое значение для всех Runner объектов?

Mong Zhu 09.04.2019 09:49

В классе бегуна необходимо установить множество динамических параметров. Я почти думаю, что если я могу свободно писать, легко просмотреть эти параметры, стиль будет таким: runner.DynamicVariableSheet.SendBackOptions.IsCancellingBrot‌​hersNode = 1; runner.DynamicVariableSheet.FowardOptions.SignForwardCompare‌​Type = "Sequence";

Bes Ley 09.04.2019 09:50
DynamicVariableSheet.SendBackOptions.IsCancellingBrothersNod‌​e = 1; этот призыв вводит в заблуждение. Это не означает, что вы обращаетесь к переменной SendBackOptions в классе DynamicVariableSheet. Это означает, что вы получаете доступ к «внутреннему классу»! Есть ли причина, по которой вы решили реализовать его как внутренний класс? Я не вижу явных причин (пока) для этого
Mong Zhu 09.04.2019 09:53

Зачем вам нужен статический класс? Если вам действительно нужен статический класс, вы можете напрямую ссылаться на этот класс в классе Runner, не используя его как свойство.

Chetan 09.04.2019 09:53

«В классе бегуна нужно установить много динамических параметров» вам нужен набор разных значений для каждого отдельного объекта Runner? могут ли они отличаться между Runner runner_1 и Runner runner_2? Это очень важный вопрос.

Mong Zhu 09.04.2019 09:54

@MongZhu, да, для каждого отдельного объекта Runner существует набор разных значений. Я просто подумал, есть ли хороший способ каждый раз избегать нового ключевого слова. Эти динамические параметры устанавливаются только один раз. Он просто управляет этими параметрами, используя группу за группой, например SendBackOption и ForwardOption.

Bes Ley 09.04.2019 10:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны сделать DynamicVariableSheet статическим членом класса Runner

Ответ принят как подходящий

Ну, поскольку они являются статическими классами, вы можете получить к ним доступ только так: DynamicVariableSheet.SendBackOptions.IsCancellingBrothersNode = значение;

Если вы хотите получить доступ следующим образом: runner.DynamicVariableSheet.SendBackOptions.IsCancellingBrothersNode = 1;

Превратите SendBackOptions и ForwardOptions в нестатические классы и поместите их за пределы DynamicVariableSheet. Теперь вы можете объявить их как свойства.

Я сделал это для вас ниже:

public class DynamicVariableSheet
{
     public SendBackOptions SendBackOptions { get; set; }
     public ForwardOptions ForwardOptions { get; set; }
}

public class SendBackOptions
{
     public byte IsCancellingBrothersNode { get; set; }
}

public class ForwardOptions
{
     public string SignForwardCompareType { get; set; }
     public float SignForwardCompleteOrder { get; set; }
}

Другие вопросы по теме