С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
.NET 4.x

Свойства или Set & Get ?

25.01.2015, 14:23. Показов 5114. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ранее до изучения C# я постоянно использовал методы Set и Get для работы с приватными переменными класса. Как оказалось, в C# имеется альтернативная возможность этому варианту в виде свойств класса. Тока вот я не особо понял их назначение. И есть ли в этом хоть какое-то приемущество. Ведь вызывая свойство вызываются сразу и get и set. А это не оптимально... И, наоборот, если работать без свойств, то всё гораздо прозрачнее и канкретнее. Если нужно задать значение приватной переменной, вызвал Set, а если получить, то get. Т.е. не будет вызов обоих методов (get и set) одновременно, при вызове свойства.
Следовательно, возник вопрос о надобности свойств вообще.. Зачем они?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2015, 14:23
Ответы с готовыми решениями:

Будет ли корректным вызывать внутри методов get или set другие функции или менять свойства контролов?
Всем привет. Скажите разрешается, не в том смысле, что понятно все разрешено, а будет ли корректным вызывать внутри методов get или set...

Свойства get set
Доброй ночи. public class Date { private int month = 7; public int Month { get { ...

Где автоматические свойства сохраняют значения?
Доброе время суток, решил на досуге почитать тут про лямбда выражения и с ужасом для себя открыл, что код public class MyClass { ...

29
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.01.2015, 14:26
Цитата Сообщение от hoz Посмотреть сообщение
Зачем они?
Блин, ну вы дали... В принципе, свойства - это просто упрощение жизни разработчиков, в реальности они разворачиваются как раз в те самые два метода: Get() и Set().
Миниатюры
Свойства или Set & Get ?  
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.01.2015, 14:28
Цитата Сообщение от hoz Посмотреть сообщение
Ведь вызывая свойство вызываются сразу и get и set.
Цитата Сообщение от hoz Посмотреть сообщение
Т.е. не будет вызов обоих методов (get и set) одновременно, при вызове свойства.
Простите, а где вы прочитали о том, что они вызываются одновременно?
Вас обманули, вызывается либо геттер, либо сеттер. Ну или оба, но в некоторых случаях (инкремент, например).
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
25.01.2015, 14:43  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Простите, а где вы прочитали о том, что они вызываются одновременно?
Вас обманули, вызывается либо геттер, либо сеттер. Ну или оба, но в некоторых случаях (инкремент, например).
Так у Троелсена то и узнал. Он меня обманул?
Вот пример из учебника:
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
// Properties!
        public string Name
        {
            get { return empName; }
            set
            {
                if (value.Length > 15)
                    Console.WriteLine("Error!  Name must be less than 16 characters!");
                else
                    empName = value;
            }
        }
 
        // We could add additional business rules to the sets of these properties,
        // however there is no need to do so for this example.
        public int ID
        {
            get { return empID; }
            set { empID = value; }
        }
        public float Pay
        {
            get { return currPay; }
            set { currPay = value; }
        }
 
        public int Age
        {
            get { return empAge; }
            set { empAge = value; }
        }
А вот его вызов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static void Main( string[] args )
        {
            Console.WriteLine("***** Fun with Encapsulation *****\n");
            Employee emp = new Employee("Marvin", 456, 30000);
            emp.GiveBonus(1000);
            emp.DisplayStats();
 
            // Set and get the Name property.
            emp.Name = "Marv";
            Console.WriteLine("Employee is named: {0}", emp.Name);
 
            // Longer than 15 characters!  Error will print to console. 
            Employee emp2 = new Employee();
            emp2.SetName("Xena the warrior princess");
 
            Console.ReadLine();
        }
Например, из этого примера вызов свойства имени происходит вот так:
C#
1
 emp.Name = "Marv";
В вызове не упоминается ни про Get, ни про Set. Я сделал вывод, что код свойства отрабатывается весть и сразу. Как же тут можно было иначе подумать то?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.01.2015, 14:50
Цитата Сообщение от hoz Посмотреть сообщение
Так у Троелсена то и узнал.
Не надо выдумывать. Все у него там верно написано!
Миниатюры
Свойства или Set & Get ?  
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.01.2015, 15:04
Цитата Сообщение от hoz Посмотреть сообщение
Он меня обманул?
Так у него нигде не написано, что они оба сразу вызываются

Цитата Сообщение от hoz Посмотреть сообщение
Я сделал вывод, что код свойства отрабатывается весть и сразу.
Вывод неправильный, к сожалению.

Цитата Сообщение от hoz Посмотреть сообщение
Как же тут можно было иначе подумать то?
Если что-то не очевидно из текста книги, то проверьте сами: поставьте точку остановки в отладчике в коде геттера и сеттера, потом попробуйте получить значение свойства. Если при получении тормознет и в геттере и в сеттере, то ваш вывод подтверждается, в противном случае — опровергается.
Если не знаете как работать с отладчиком, то просто и там и там пропишите что-то типа:
C#
1
2
get { Console.WriteLine("In getter"); }
set { Console.WriteLine("In setter"); }
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
25.01.2015, 19:09  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Если не знаете как работать с отладчиком, то просто и там и там пропишите что-то типа
То что приходилось делать умею. В принципе, поправил метод Main() вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static void Main(string[] args)
    {
     Console.WriteLine("***** Fun with Encapsulation *****\n");
     Employee emp = new Employee("Marvin", 456, 30000);
     emp.GiveBonus(1000);
     emp.DisplayStats();
    
     // Set and get the Name property.
     emp.Name = "Marv";
     emp.Name = "Marv_1";
     emp.Name = "Marv_2";
     emp.Name = "Marv_3";
     Console.WriteLine("Employee is named: {0}", emp.Name);
    
     // Longer than 15 characters!  Error will print to console. 
     Employee emp2 = new Employee();
     emp2.SetName("Xena the warrior princess");
    
     Console.ReadLine();
    }
Вывод такой:



Делаю предположение, что у свойство есть какая-то реализация, чтобы если это свойство вызывается с параметров, который отличается от value в свойстве, то оно меняется, и ессно set срабатывает, а если нет, то срабатывает только get. Получается так?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
25.01.2015, 19:23
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        static void Main(string[] args)
        {
            List<Person> persons = new List<Person>();
            persons.Add(new Person{Name = "Иван", LastName="Петров"}); // Set 
            foreach (var p in persons)
                Console.WriteLine(p.Name + "  " + p.LastName); // Get
            Console.ReadKey();
        }
    }
 
    class Person
    {
        public string Name { get; set; }
        public string LastName { get; set; }
    }
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.01.2015, 19:31
Цитата Сообщение от hoz Посмотреть сообщение
Делаю предположение
hoz, да какие тут еще предположения, что непонятного? Рассматривайте свойство просто как два отдельных метода, совмещенных вместе. Вам и Троелсен об этом в книге говорит, и тут уже какой пост показывают...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.01.2015, 11:08
Цитата Сообщение от hoz Посмотреть сообщение
Делаю предположение, что у свойство есть какая-то реализация, чтобы если это свойство вызывается с параметров, который отличается от value в свойстве, то оно меняется, и ессно set срабатывает, а если нет, то срабатывает только get.
Все намного проще: если свойство стоит в левой части присваивания, то вызывается set, если в правой, то get.
1
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.01.2015, 16:03
Лучший ответ Сообщение было отмечено hoz как решение

Решение

Свойства это методы в удобном виде. Делается исключительно для логического понимания программы. Свойствами обычно обозначают состояние данного объекта. Методы же подразумевают действие. Например у нас есть объект "мяч". Его характеристики: объем(размер), позиция на координатах.

C#
1
2
3
4
5
6
public Ball
{
public int X { get; set; }
public int Y { get; set; }
public int R { get; set; }
}
Теперь такой ньюанс: радиус не может быть отрицательным, значить имеет смысл добавить проверку. Это демонстрирует приемущество над полями. (если бы мы просто напрямую написали public int R

C#
1
2
3
4
5
6
7
8
9
10
11
public Ball
{
public int X { get; set; }
public int Y { get; set; }
private int r;
public int R { 
get {return r;} 
set {
if(value<0) throw new Exception(); //выдаем исключение (программа упадет)
else r = value; }
}
Теперь такой момент. Например нам мяч нужно двигать. Можно просто менять X, Y и все будет работать. Но как уже писали выше -- более логично действия выносить в метод

C#
1
2
3
4
5
public Ball
{
public void Move(int x, int y)
{
 X = x; Y = y;
А вообще это банально экономит код/работу. Толи постоянно(!) для каждого нового свойства объекта пилить два(!!) однотипных метода Get/Set, когда все можно уместить в одну строчку, без лишних приставок. Для наглядности:

C#
1
2
3
4
5
6
7
8
public Ball
{
public int GetX();
public int SetX();
public int GetY();
public int SetY();
public int GetR();
public int SetR();}
Еще такой момент, когда ты уже знаешь все о шарпе, и занят не сколько разбором работы лямда выражений, сколько бизнес логикой: пишешь код, обращаешься к объекту model, тебе нужно задать его свойство (или получить). После точки ты сразу(!) пишешь имя искомого свойства.

В двух словах: ЭТО УДОБНО.
1
27.01.2015, 01:54
 Комментарий модератора 
Оффтоп прекращаем.
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
27.01.2015, 19:13  [ТС]
Ev_Hyper, То что всё не понять не будучи разработчиком языка это понятно. Но я ж в дебри то не лезу. Это ж базовые знания вроде как. Тем более у меня поставлена задача изучить базу за пару месяцев. Примерно так. А практиковать то я смогу серьёзнее когда будут знания уже по увереннее. Причина тому то, что писать мне нада dll-ки, и использовать WPF. К изучение WPF планирую приступить через месяца 2-3.
wmclik, Согласен. Книги пишут наверное для себя. Их мало кто понимает сходу. И очевидностей не много для новичков.
Цитата Сообщение от kolorotur Посмотреть сообщение
Все намного проще: если свойство стоит в левой части присваивания, то вызывается set, если в правой, то get.
По ходу Вы ошибаетесь. Вот смотрите:

Выходит, что как-то не совсем так вызов происходит. У меня создаётся такое ощущение, что не только я это не допонимаю, но только я это сказал вслух
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.01.2015, 19:29
Цитата Сообщение от hoz Посмотреть сообщение
поставлена задача изучить базу за пару месяцев.
Если вы планируете иметь хорошую базу - это вряд ли. За такой срок.
Цитата Сообщение от hoz Посмотреть сообщение
По ходу Вы ошибаетесь.
Не говорите чепухи. Все там ясно и понятно.
Цитата Сообщение от hoz Посмотреть сообщение
У меня создаётся такое ощущение, что не только я это не допонимаю
Оно вас обманывает, поверьте. При взгляде на код все становится ясно без глубоких раздумий.

Добавлено через 1 минуту
Цитата Сообщение от hoz Посмотреть сообщение
писать мне нада dll-ки, и использовать WPF
Одно немного противоречит другому.
dll - как правило логика реализации программы, вне зависимости от интерфейса.
WPF - это именно интерфейс. Так что же вы хотите ?)))
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.01.2015, 19:33
За месяц можно выучить базу спокойно, если вам кто то умный подберет нужный индивидуальный материал в зависимости от ваших знаний. Но в вашем случае мне кажется вы не те книги абсолютно читаете
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.01.2015, 19:41
Цитата Сообщение от _exp10der_ Посмотреть сообщение
За месяц можно выучить базу спокойно
_exp10der_, если не секрет, что в вашем понимании база?
Мое видение:
1. Основы, т.е. классы, структуры, поля, методы. свойства, модификаторы и так далее, встроенные типы, конструкторы и так далее...
2. Файлы и потоки, сериализация.
3. Базы данных, работа с ними.
4. LINQ во всех проявлениях (LINQ to Object, LONQ to Xml, LINQ to DataSet).
5. Лямбда выражения, анонимные методы и делегаты, методы расширения.
6. Многопоточность и асинхронность, параллельное выполнение. Начиная от потоковых примитивов до работы с PLINQ и Parallel.
Примерно так, хотя, возможно, что-то и забыл упомянуть. Вы считаете, на все это хватит месяца?)))
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.01.2015, 19:49
1. Основы, т.е. классы, структуры, поля, методы. свойства, модификаторы и так далее, встроенные типы, конструкторы, события
2. Файлы и потоки, сериализация.
3. Лямбда выражения, анонимные методы и делегаты, методы расширения.
4. LINQ to Object
Как то так но это не значит что человек благодаря получим знаниям не сможет зайти на мсдн и сделать допустим Linq to Xml и другие базовые вещи
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.01.2015, 19:51
_exp10der_, а как же базы данных, многопоточность? Это тоже база, как же без хранения данных? Да и подвисающие приложения тоже не фонтан для пользователей?)))
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
27.01.2015, 19:54  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Оно вас обманывает, поверьте. При взгляде на код все становится ясно без глубоких раздумий.
Я на него смотрел уже ни раз. И редактировал и добавлял варианты. Как-то отрабатываются Set и Get не так как выше изложено. Очень хотелось бы услышать конкретный ответ дабы прикрыть эту тему и я сдвинулся с места..
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.01.2015, 19:58
Цитата Сообщение от hoz Посмотреть сообщение
отрабатываются Set и Get не так как выше изложено
Все отрабатывается верно. Можете не сомневаться. Мыслите логически и поймете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2015, 19:58
Помогаю со студенческими работами здесь

Можно ли изменить тип возвращаемого значения через свойства?
Можно ли изменить тип возвращаемого значения через свойства? Или же свойства не приспособлены к этому..:read: Допустим, у меня есть поле...

Автоматические свойства get set
class Start { static void Main() { Test t = new Test(7); Console.WriteLine(t.a); //вывод 7 } }

Свойства. Недопонимание с акссесорами set и get
Читаю книгу Г. Шилдта по С# и разбираю пример с исключениями. Возникло недопонимание в написании свойств длины массива. Насколько смог...

Свойства get set: каково их назначение
Можете простым языком обьяснить что значат get и set?

Свойства (set,get) трансляция в main
Доброго времени суток компьютерщики! Не получается посмотреть как работает свойство(...,set) . А именно хочу вывести через...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru