Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
307 / 54 / 7
Регистрация: 30.05.2012
Сообщений: 295
1

Не происходит инициализация полей

24.07.2012, 23:53. Просмотров 1353. Ответов 3
Метки нет (Все метки)

есть класс
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
public class DinnerParty
    {
        private const int costOfFoodPerPerson = 30;
        private bool healthyOption;
        private bool fancyDecorations;
        private double costOfDecorationsPerPerson;
        private int costOfDrinksPerPerson;
        private int fee;
        private int numberOfPeople;
 
        #region Properties
        public bool HealthyOption 
        { 
            get
        {
            return healthyOption;
        }
            set
            {
                healthyOption = value;
            }
        }
 
        public bool FancyDecorations 
        {
            get
            {
                return fancyDecorations;
            }
            set
            {
                fancyDecorations = value;
            }
        }
 
        public int NumberOfPeople 
        {
            get
            {
             return numberOfPeople;
            }
            set
            {
                numberOfPeople = value;
            }
        }
 
        public double CostOfDecorationsPerPerson
        {
            get
            {
                return costOfDecorationsPerPerson;
            }
            set
            {
                if (fancyDecorations)
                    costOfDecorationsPerPerson = 15;
                if (!fancyDecorations) 
                    costOfDecorationsPerPerson = 7.5;
            }
        }
 
        public int CostOfDrinksPerPerson 
        {
            get
            {
             return costOfDrinksPerPerson;
            }
            set
            {
                if (healthyOption)
                    costOfDrinksPerPerson = 5;
                if(!healthyOption) 
                    costOfDrinksPerPerson = 20;
            }
        }
 
        public int Fee // задаток
        {
            get
            {
                return fee;
            }
            set
            {
                if (fancyDecorations)
                    fee = 50;
                if (!fancyDecorations) 
                    fee = 30;
            }
        }
        #endregion
 
        public double CalculateCost() // посчитать общую стоимость
        {
            
            if (healthyOption)
                return 0.95 * (fee + numberOfPeople * (costOfFoodPerPerson + costOfDrinksPerPerson + costOfDecorationsPerPerson));
            else return fee + numberOfPeople * (costOfFoodPerPerson + costOfDrinksPerPerson + costOfDecorationsPerPerson);
        }
    }
при присвоении свойствам обьекта dinnerParty

C#
1
2
dinnerParty.FancyDecorations 
dinnerParty.HealthyOption
значений true или false в дальнейшем не происходит инициализация полей, свойства которых зависят от булевских свойств.
То есть поля
C#
1
2
3
 private int fee;
private double costOfDecorationsPerPerson;
private int costOfDrinksPerPerson;
остаются равными нулю.
Где моя ошибка, как это исправить?

Добавлено через 9 минут
или нельзя поля так инициализировать через свойства, а нужно через простой метод?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2012, 23:53
Ответы с готовыми решениями:

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

Инициализация полей структуры
Всем, привет. Такой вопрос, при написании вот такого кода в c# struct a { } int main() { ...

Инициализация полей классов
Сколько раз здесь будет инициализирован x? class InitialierTestClass { public...

Инициализация статических полей
Ковыряю legacy код, возможно нубский вопрос:( Есть глобальный класс со статическими полями и...

3
Темная сторона .Net
589 / 486 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
25.07.2012, 00:20 2
Ты создаешь экземпляр класса стандартный конструктором.Он задает всем переменным стандартные значение,а потом ты задаешь значение Булов и все.Это все что ты сделал.
Значение других свойств не изменяется потому что у них уже есть значение и когда их сменить они не знают.
//ищу решение)

Добавлено через 5 минут
Сделай конструктор в котором будет происходить инициализация полей.
Что-то типа этого.
C#
1
2
3
4
5
6
7
        public DinnerParty(bool HealthyOption, bool FancyDecorations)
        {
            healthyOption = HealthyOption;
            fancyDecorations = FancyDecorations;
            if (healthyOption) fee = 20;
 
        }
Ы.З. Свойства нужны для доступа к полям,контроля их set и get значение(извини,не придумал еще как точнее написать),для привязки данных,но они не умеет отлавливать события изменение полей класса,если можно так сказать
1
307 / 54 / 7
Регистрация: 30.05.2012
Сообщений: 295
25.07.2012, 01:04  [ТС] 3
Да, спасибо за пояснения. Кстати я уже сам разобрался, понял что через свойства так нельзя делать, нужно либо через обычный метод и разветвление задавать поля, либо через конструктор.
0
Темная сторона .Net
589 / 486 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
25.07.2012, 22:30 4
Если ты используешь классы - используй конструктор,чего от удобства отказываться
+ их можно перегружать)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2012, 22:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Инициализация в классе полей типа Enum
Добрый день! Есть класс, в нем есть поле перечисления. class Worker { private string...

Инициализация полей - в чем разница двух приведенных реализаций
class first { public first() { a=5; b="строка"; } int a;...

Всплывающий блок, не происходит инициализация
Привет, есть такой код по клику на ссылку Показать происходит открытие блока внутри текущей...

Объясните как происходит инициализация данного указателя
Доброе утро. Объясните понятным языком по этапно, как происходит инициализация указателя на...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.