.net доступ к локальной переменной внутри класса

2

Я новичок в С# и.NET Framework и изо всех сил пытаюсь понять, как это сделать. Я полагаюсь на Наследование для чего-то подобного?

Когда переменная allDim истинна, я хочу, чтобы все экземпляры экземпляров возвращали 0 для своего dimPercent.

public class Program
{
    //if this is true, all rooms should return 0
    public bool allDim = false;
    public class Room
    {
        //0 is lights out. 100 is as bright as possible
        public Room(int dimPercent)
        {
            DimPercent = dimPercent;
        }

        private int dimPercent;
        public int DimPercent
        {
            get
            {
                if (Program.allDim)
                {
                    //if allDim is true, all lights should be dimmed to 0 percent
                    return 0;
                }
                else
                {
                    return dimPercent;
                }
            }

            set
            {
                dimPercent = value;
            }
        }
    }

    public static void Main()
    {
        Room livingRoom = new Room(80);
        Room kitchen = new Room(85);
        Room bedroom = new Room(65);
        allDim = true;
        // This should return 0 since allDim was set to true
        Console.WriteLine(kitchen.DimPercent);
    }
}

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

  • 1
    Вы должны установить allDim как статический: public static bool allDim = false;
  • 0
    Вы не должны делать открытые поля. Сделайте это собственностью по крайней мере.
Показать ещё 1 комментарий
Теги:
oop

2 ответа

1
Лучший ответ

Преобразуйте логическое значение в статический член класса.

public static bool allDim = false;
  • 0
    публичные поля - плохая практика, лучше использовать свойства
  • 2
    Это плохо, потому что вы выставляете внутреннее состояние вашего объекта, и у вас нет никакого контроля над тем, как это состояние изменяется. С помощью методов получения и установки вы можете, по крайней мере, проверить данные и изменить их при необходимости, чтобы внутреннее состояние вашего объекта оставалось согласованным (и действительным). Отсюда: softwareengineering.stackexchange.com/a/161310/114942
Показать ещё 1 комментарий
2

Если вы сделаете allDim в частное статическое поле, вы легко достигнете того, что хотите. Однако с точки зрения ответственности вы должны спросить себя, может ли какой-либо из комнат повлиять на другие комнаты?

public class Room
{
    private static bool allDim = false;
    // I am not sure if we should make this into a static method
    public void SetAllDim(bool isAllDim){
        allDim = isAllDim;
    }
...
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню