Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 45

Не изменяется свойство

09.11.2013, 21:29. Показов 1528. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Задача - написать упрощенный эмулятор бытовых приборов.
Есть два класса: родитель Device.cs и его наследник Lamp.cs
При создании объекта myLamp мы задаем только его имя. Изначальное состояние - лампа выключена, а следовательно яркость 0, и менять мы ее не можем. Когда мы включаем лампу, яркость - 10. Единственные действия с ней: включение, выключение, Добавить яркость, Убавить яркость.
Проверку на корректное изменение яркости я реализовал свойстве Bright через сеттер.
Но, проблема в том, что когда я создаю объект, все его изначальные свойства корректные (имя, статус, яркость), но вот когда я хочу включить лампу, изменяется только статус (с true на false), а вот яркость остается неизменной.
Прилагаю коды классов:
//Класс Device.cs
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication12
{
    class Device
    {
        //Поля
        private bool devStatus;
        private string devName;
        private int lampBright;
 
        //Конструкторы
        public Device() { }
        public Device(string name)
        {
            Name = name;
            Status = false;
        }
 
        //Методы
        public virtual void On()
        {
            devStatus = true;
        }
 
        public virtual void Off()
        {
            devStatus = false;
        }
 
        public override string ToString()
        {
            return devName;
        }
        //Свойства
        public string Name { get; set; }
        public bool Status
        {
            get { return devStatus; }
            set
            {
                if (value)
                    devStatus = true;
                else
                    devStatus = false;
            }
        }
        public int Bright
        {
            get { return lampBright; }
            set
            {
                if (devStatus)
                {
                    if (value > 10)
                        lampBright = 10;
                    else
                        if (value < 0)
                            lampBright = 0;
                        else
                            lampBright = value;
                }
                else
                    lampBright = 0;
            }
        }
    }
}

//Класс Lamp
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication12
{
    class Lamp : Device, ILight
    {
        //Поля
 
        //Конструктор
        public Lamp(string name)
            : base(name)
        {
            Bright = 0;
        }
        //Методы
 
        public void LightUp()
        {
            Bright += 1;
        }
 
        public void LightDown()
        {
            Bright -= 1;
        }
        public override string ToString()
        {
            return "Имя: " + Name + Environment.NewLine + "Статус: " + Status + Environment.NewLine + "Яркость: " + Bright;
        }
        //Свойства
       
        }
    }
Миниатюры
Не изменяется свойство  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2013, 21:29
Ответы с готовыми решениями:

Не изменяется свойство объекта
&lt;script&gt; function TextCut(event) { this.event = event; cutIf(this.event); function...

Не изменяется программно свойство Kind кнопки BitBtn
Добрый вечер! В инспекторе объектов задано свойство Kind у bitbtn как &quot;bkNo&quot; В ходе программынеобходимо поменять на &quot;bkYes&quot;, но...

Основное свойство многочлена тейлора? Что это за свойство?
(о значениях в в точке x0 функции и ее многочлена тейлора, а так же их производных). Так же нужно доказательство для этого свойства, но не...

8
 Аватар для lpvoid
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
09.11.2013, 21:35
Цитата Сообщение от OverBack Посмотреть сообщение
C#
1
2
3
4
public virtual void On()
{
    devStatus = true;
}
вы в сим методе никакое свойство не меняете, с чего вы взяли что оно должно у вас поменяться?
Цитата Сообщение от OverBack Посмотреть сообщение
C#
1
2
3
4
if (value)
    devStatus = true;
else
    devStatus = false;
вот это вообще глупость. зачем нужна эта проверка?
1
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 45
09.11.2013, 21:41  [ТС]
lpvoid, меняется только статус, потому что класс Device наследует не только класс Lamp (в котором можно изменить яркость), но и Radio.cs и TV.cs. В TV яркость меняется, а вот в Radio, только громкость. По этому я не могу в методе On() ничего поменять кроме статуса.
Я думал, что таким образом все будет работать, поскольку яркость зависит от статуса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int Bright
        {
            get { return lampBright; }
            set
            {
                if (devStatus)
                {
                    if (value > 10)
                        lampBright = 10;
                    else
                        if (value < 0)
                            lampBright = 0;
                        else
                            lampBright = value;
                }
                else
                    lampBright = 0;
            }
По поводу последнего, действительно, бред написал
0
 Аватар для lpvoid
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
09.11.2013, 21:43
Цитата Сообщение от OverBack Посмотреть сообщение
По этому я не могу в методе On() ничего поменять кроме статуса.
вот это тоже глупость, причем еще посильнее предыдущей. вы можете хоть сотню классов унаследовать от Device, они друг на друга никак не будут влиять.
1
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 45
09.11.2013, 21:45  [ТС]
lpvoid, то есть, если я напишу
C#
1
2
3
4
5
 public virtual void On()
        {
            devStatus = true;
            lampBright = 10;
        }
это не будет ошибкой с точки зрения ООП?
0
 Аватар для lpvoid
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
09.11.2013, 21:47
OverBack, нет. ошибкой с точки зрения ооп было поместить это свойство в класс Device, если оно используется только наследником Lamp. если оно используется еще какими-то наследниками, следовало и назвать его соответствующе, просто bright то бишь.
1
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 45
09.11.2013, 21:51  [ТС]
lpvoid, Нет, это свойство используется еще в классе TV, по этому я подумал, что разумнее будет поместить свойство в класс Device, чтобы не дублировать его в TV. Хоть это я правильно сделал?
А по поводу имени, согласен, переименовал в devBright
0
 Аватар для lpvoid
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
09.11.2013, 21:54
OverBack, это вполне правильно).

Добавлено через 2 минуты

Не по теме:

а вообще, если уж совсем правильно, то лампа, теоретически, должна завести в себе переменную lastBright и после выключения яркость лампы должна быть сохранена в этой переменной, а при включении она должна быть присвоена переменной bright, дабы было уж совсем реалистично (ведь настольная лампа с регулятором яркости эту самую яркость после включения-выключения сохраняет).

1
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 45
10.11.2013, 02:44  [ТС]
lpvoid,
фух)
и напоследок, еще один вопрос: когда я включаю и выключаю прибор, мне необходимо чтобы сохранялось значение яркости (только в рамках запущенной программы), каким образом лучше это сделать?
опередили) спасибо огромное!

Добавлено через 4 часа 47 минут
Проблема остается в силе.
Имеем свойство:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 public int Bright
        {
            get { return devBright; }
            set
            {
                if (devStatus)
                {
                    devBright = 10;
                }
                else
                    devBright = 0;
            }
        }
В зависимости от того, работает устройство или нет, устанавливается уровень яркости.
Когда я хочу вывести текущее состояние, я обращаюсь к этому свойству, но ничего не происходит. Геттер возвращает мне старое значение. Окей. Напишем метод:
C#
1
2
3
4
public void LightUpd()
        {
            Bright = Bright;
        }
И выведем значение. И надо же, все работает, но почему так?

Добавлено через 1 минуту
Данные обновляются только если я обращаюсь к set, а вот get возвращает неактуальную информацию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2013, 02:44
Помогаю со студенческими работами здесь

Как заставить свойство "Text" компонента Label забиндиться на свойство TheChar из пользовательского класса
Здравствуйте, не получается заставить свойство &quot;Text&quot; компонента Label забиндиться на свойство TheChar из моего класса, основанного на...

Передать свойство объекта в свойство объекта в объекте что в массиве
var array = ; function func(a, b, c) { array = {}; array.a = {}; // вместо &quot;a&quot; - аргумент array.a.b = text3; // и здесь. } ...

Поле изменяется, если "Записать", но не изменяется, если "Записать и закрыть"
Озадачен. Есть текстовое поле справочника - Наименование. Записываю в него данные других полей после небольшой манипуляции с ними....

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru