Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 1
Регистрация: 21.03.2011
Сообщений: 46
1

Зачем всегда инкапсулировать переменные в свойства

01.07.2013, 06:11. Просмотров 2717. Ответов 3
Метки нет (Все метки)


Давно хотел спросить. Вопрос возникает постоянно, когда я вижу код типа такого:
C#
1
2
3
4
5
6
7
8
9
10
class cls
    {
        private int _iii;
 
        public int Iii
        {
          get { return _iii; }
          set { _iii = value; }
        }
    }
Даже у Троелсена есть подобный пример:

Кликните здесь для просмотра всего текста
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
    class Employee 
    { 
        // Поля данных. 
        private string empName; 
        private int empID; 
        private float currPay; 
        // Свойства. 
        public string Name 
        { 
            get { return empName; } 
            set 
            { 
                if (value.Length > 15) 
                    Console.WriteLine ("Error! Name must be less than 16 characters!"); 
                else 
                    empName = value; 
            } 
        } 
        // Можно было бы добавить дополнительные бизнес-правила для установки 
        // этих свойств, но в данном примере в этом нет необходимости. 
        public int ID 
        { 
            get { return empID; } 
            set { empID = value; } 
        } 
        public float Pay 
        { 
            get { return currPay; } 
            set { currPay = value; } 
        } 
    }

Я понимаю, с какой целью инкапсулируется поле empName, но зачем нужны свойства ID и Pay?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2013, 06:11
Ответы с готовыми решениями:

Зачем объявлять переменные?
В самом деле. Зачем объявлять переменные, если требуется просто написать решение, сдать...

Зачем нужны автоматически реализуемые свойства?
Зачем нужны автоматически реализуемые свойства в c#? Что, нельзя просто пометить поле как public?...

Зачем нужны автоматические свойства? {get; set}
Я прочел все темы в этом форуме касательно свойств. Но никто толком не может ответить зачем нужны...

Зачем переменные инициализируются нулем?
#include <math.h> #include <iostream> using namespace std; int gcf(int a,int b); int main () {...

3
Эксперт .NET
4337 / 1999 / 387
Регистрация: 27.03.2010
Сообщений: 5,450
Записей в блоге: 1
01.07.2013, 06:30 2
Как я думаю, это всё та же инкапсуляция ради инкапсуляции . Далее не известно, вдруг при редактировании свойства нужно будет добавить какие-то проверки в него, ещё какой-то функционал. А окажется, что оно не свойство. Или как ты сделаешь поле доступным для редактирования только внутри класса, но для чтения извне? Так же свойства нужны для биндингов. Так же, та же студия отображает чисто свойства в окне свойств у объектов (ну, конечно пример не супер, но пример).

Добавлено через 3 минуты
Или нужно тебе реализовать интерфейс, придётся реализовывать свойство, как ни крути
C#
1
2
3
4
    internal interface IGameObject
    {
        string Name { get; }
    }
Добавлено через 6 минут
При наследовании ты сможешь переопределить свойство, а паблик поле так и останется паблик полем, которое может не дать осуществить задуманное через наследование. В общем, паблик поля это не гуд.
2
1 / 1 / 1
Регистрация: 21.03.2011
Сообщений: 46
01.07.2013, 06:47  [ТС] 3
Цитата Сообщение от Casper-SC Посмотреть сообщение
Далее не известно, вдруг при редактировании свойства нужно будет добавить какие-то проверки в него, ещё какой-то функционал.
Ну, в студии есть удобные инструменты для рефакторинга, из переменной можно сделать свойство за несколько кликов.
Цитата Сообщение от Casper-SC Посмотреть сообщение
Или как ты сделаешь поле доступным для редактирования только внутри класса, но для чтения извне?
Цитата Сообщение от Casper-SC Посмотреть сообщение
Или нужно тебе реализовать интерфейс, придётся реализовывать свойство, как ни крути
Тут, конечно, использование свойств оправдано.
0
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
01.07.2013, 08:17 4
Insomnium,
3) привязки данных (например в WPF) работают только со свойствами.
4) как уже сказано выше, потом могут появиться правила обработки (например, неотрицательность интового поля). Представьте себе, что вы не можете просто так взятьи перекомпилировать все, чтобы заработало, например это библиотечный класс, который наследуется сотней различных клиентов... Или используется... Вот так...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2013, 08:17

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

Свойства класов - зачем помещать свойство в приват
Очень часто встречал такие классы claas A { public: int getCount( void ) { return count; };...

Зачем использовать поля, если есть свойства?
Приветствую. Объясните новичку: для чего нужно использовать поля, если есть такая штука, как...

Свойства и переменные
добрый день! продолжаю учить obj c. Не понял один момент со свойствами. кратко создал класс со...

CSS: Переменные и свойства
Как в переменную задать значение, например, свойства height класса cl_i? то есть у меня есть...


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

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

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