Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 .. 25   вперед  Ctrl
 Re: Автосвойства  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
в конструкторе лучше использовать поля, он для того и предназначен, чтоб инициализировать объект в памяти.
Но далеко не все поля могут быть доступны, ведь есть еще наследование, конструктор вашего класс, который наследует базовый, может изменить значение поля базового класса, так как поменять напрямую поле он не может из-за ограничения доступа.

Отнеситесь к свойству как к методу, если вам нужно изменить значение года в типе DateTime, вы же не считаете вручную какие биты и на что нужно изменить в поле long которое он содержит. Вы просто вызываете метод свойства и он это делает. Так же и внутри класса, если логика выполнения подразумевает изменения года или другой части времени, мне не надо пересчитывать всё руками, я вызываю метод который это делает (PropertySetter), но если мне надо сразу инициализировать значение поля в конструкторе, то быстрее это сделать напрямую с полем.
Так же еще можно вспомнить про то, что модификатор доступа private действует не в рамках экземпляра объекта, а в рамках типа. То есть из экземпляра объекта А, можно изменить поле экземпляра B, если они одного типа.

с точки зрения выполнения в машинных кодах, обращения к полю напрямую быстрее, чем вызов метода Setter'а свойства, но этим стоит пренебрегать
14 мар 19, 17:36    [21832882]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 1690
listtoview
skyANA
Пример реализации без инкапсуляции таков:
    class NoEncapsulation
    {
        public double ValueDouble;
        public string ValueString;
    }


Пример реализации с использованием инкапсуляции:
    class EncapsulationExample
    {
        private double valueDouble;
        private string valueString;

        public double ValueDouble
        {
            get { return valueDouble; }
            set 
            {
                valueDouble = value;
                valueString = value.ToString();
            }
        }

        public string ValueString
        {
            get { return valueString; }
            set 
            {
                double tmp_value = Convert.ToDouble(value); //здесь может возникнуть исключение
                valueDouble = tmp_value;
                valueString = value;
            }
        }
    }


приведите, пожалуйста пример конструктора устанавливающего оба поля для класса EncapsulationExample

А по логике разве не понятно, как должно быть?
К чему семь страниц топика, если вы суть не улавливаете? :)
15 мар 19, 08:44    [21833266]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
Дмитрий Мух
listtoview
пропущено...

приведите, пожалуйста пример конструктора устанавливающего оба поля для класса EncapsulationExample

А по логике разве не понятно, как должно быть?
К чему семь страниц топика, если вы суть не улавливаете? :)

во первых: по логике мне вообще кажется что valueString хранить не надо
во вторых: Roman Mejtes, Petro123 пишут что в конструкторе все же поля лучше использовать, а вы пишите что свойства, так то прав? не понятно. Правда Petro123 заметил что там не было virtual.

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

у меня другая логика:
класс инкапсулирует состояние именно в полях.
внутри класса работать надо именно с полями
а свойства нужны для работы клиентского кода с нашим классом
15 мар 19, 09:18    [21833290]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38457
listtoview
у меня другая логика:
класс инкапсулирует состояние именно в полях.

Но приводят в согласованное состояние _бывает_ свойства.
Без них будет копирование кода.
Хотя я стараюсь это минимизировать.
15 мар 19, 09:44    [21833312]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26466
listtoview
Дмитрий Мух
пропущено...

А по логике разве не понятно, как должно быть?
К чему семь страниц топика, если вы суть не улавливаете? :)

во первых: по логике мне вообще кажется что valueString хранить не надо
Пример иллюстрирует инкапсуляцию, целью которой является обеспечение согласованности внутреннего состояния объекта.

В этом его суть.

listtoview
нужно всегда использовать свойства, так как они приводят класс в согласованное состояние.
получается поля нужно использовать только в свойствах и больше нигде в классе, иначе он может быть несогласованным
Не получается.

listtoview
но что то такого в документации нет
В книгах, курсах, документации нет объяснения принципов ООП? Чушь :)
15 мар 19, 09:59    [21833337]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26466
listtoview,

рекомендую https://stepik.org/course/3944
15 мар 19, 10:01    [21833339]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
skyANA
listtoview
пропущено...

во первых: по логике мне вообще кажется что valueString хранить не надо
Пример иллюстрирует инкапсуляцию, целью которой является обеспечение согласованности внутреннего состояния объекта.

В этом его суть.

listtoview
нужно всегда использовать свойства, так как они приводят класс в согласованное состояние.
получается поля нужно использовать только в свойствах и больше нигде в классе, иначе он может быть несогласованным
Не получается.

listtoview
но что то такого в документации нет
В книгах, курсах, документации нет объяснения принципов ООП? Чушь :)

понятно, спасибо
приведите, пожалуйста пример когда не получается использовать свойство и приходится обращаться к полю
15 мар 19, 10:59    [21833414]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
listtoview
приведите, пожалуйста пример когда не получается использовать свойство и приходится обращаться к полю
Например когда нет свойства, а есть только поле Картинка с другого сайта.
15 мар 19, 11:10    [21833426]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
Shocker.Pro
listtoview
приведите, пожалуйста пример когда не получается использовать свойство и приходится обращаться к полю
Например когда нет свойства, а есть только поле Картинка с другого сайта.

делайте всегда автосвойства :)
15 мар 19, 11:14    [21833431]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
skyANA,

кстати, получается
если появилось свойство с сетером, то надо прошерстить код и заменить использование поля на свойство
15 мар 19, 11:15    [21833432]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
listtoview,

Твой вывод выглядит примерно так:
Летом нужно всегда ходить в резиновых сапогах, потому что может пойти дождь, и я промочу ноги.

Ну ходи, кто тебе запретит-то.
15 мар 19, 11:21    [21833442]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38457
listtoview
приведите, пожалуйста пример когда не получается использовать свойство и приходится обращаться к полю
хитрый)
15 мар 19, 11:38    [21833484]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
Petro123,

Я уже приводил, в unsafe. невозможно разыменовывать свойство.
свойство не может быть волатильным и оно не потокобезопасно, даже если тип и операция с ним атомарны.
к чему обращаться в рамках класса нужно думать головой, нет ни каких ограничений, зачем придумывать какие то ограничения?
у класса вообще может не быть свойств, так как они нафиг не нужны, но это не мешает ему иметь внутреннее состояние.
Возьмём, к примеру, свойство у которого в сеттере возбуждается OnPropertyChanged. Я могу изменить свойство и с помощью него обновить значение в представлении, но если не хочу меня это свойство, я могу работать с полем напрямую и вызвать это событие только в конце выполнения.
15 мар 19, 13:26    [21833723]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38457
Roman Mejtes
нет ни каких ограничений, зачем придумывать какие то ограничения?
В целом согласен, но в архитектуре границы дозволенного есть.
Не знаю зачем ему. Может свитчуется на архитектора). Может поговорить просто.
"Ограничения" размыты и бесплатно их никто не даст).
15 мар 19, 13:47    [21833764]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
Shocker.Pro
listtoview,

Твой вывод выглядит примерно так:
Летом нужно всегда ходить в резиновых сапогах, потому что может пойти дождь, и я промочу ноги.

Ну ходи, кто тебе запретит-то.

правильно
просто промочив ноги летом, ничего страшного

держите такой пример:
исходя из того что на улице зима, лучше не выходить на улицу в одной футболке
15 мар 19, 13:50    [21833775]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
Roman Mejtes
Petro123,

Я уже приводил, в unsafe. невозможно разыменовывать свойство.
свойство не может быть волатильным и оно не потокобезопасно, даже если тип и операция с ним атомарны.
к чему обращаться в рамках класса нужно думать головой, нет ни каких ограничений, зачем придумывать какие то ограничения?
у класса вообще может не быть свойств, так как они нафиг не нужны, но это не мешает ему иметь внутреннее состояние.
Возьмём, к примеру, свойство у которого в сеттере возбуждается OnPropertyChanged. Я могу изменить свойство и с помощью него обновить значение в представлении, но если не хочу меня это свойство, я могу работать с полем напрямую и вызвать это событие только в конце выполнения.

в свойстве событие возбуждать, как-то некрасиво
не?
15 мар 19, 13:53    [21833782]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
listtoview
в свойстве событие возбуждать, как-то некрасиво
не?
уууууу.....
https://docs.microsoft.com/ru-ru/dotnet/api/system.componentmodel.inotifypropertychanged?view=netframework-4.7.2
15 мар 19, 13:59    [21833796]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38457
listtoview
не?
не!
15 мар 19, 13:59    [21833799]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
ок
15 мар 19, 14:07    [21833824]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
Roman Mejtes
Petro123,

Я уже приводил, в unsafe. невозможно разыменовывать свойство.
свойство не может быть волатильным и оно не потокобезопасно, даже если тип и операция с ним атомарны.
к чему обращаться в рамках класса нужно думать головой, нет ни каких ограничений, зачем придумывать какие то ограничения?
у класса вообще может не быть свойств, так как они нафиг не нужны, но это не мешает ему иметь внутреннее состояние.
Возьмём, к примеру, свойство у которого в сеттере возбуждается OnPropertyChanged. Я могу изменить свойство и с помощью него обновить значение в представлении, но если не хочу меня это свойство, я могу работать с полем напрямую и вызвать это событие только в конце выполнения.

unsafe - метод заюзать можно
волатильность - так и не надо, мало ли какая логика должна быть при установке поля
не потокобезопасно - зависит от того как кодер написал свойство. С таким же успехом и в методе можно не обработать ошибку и получить несогласованное состояние класса

на мой взгляд утверждение skyANA что при обращении через поле напрямую можно нарушить правильное состояние класса весьма весом
плюс иначе это приведет к дублированию кода

Додумываю:
получается всегда нужно использовать свойства
а поля заменять автосвойствами
отдельно поля можно юзать, только если автосвойство развернуто, и только в нем

звучит убедительно
15 мар 19, 14:26    [21833873]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
плюс приватные сеттеры вообще убирают необходимость обращаться к полю напрямую
15 мар 19, 14:28    [21833876]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38457
listtoview
звучит убедительно
-1
Оверхед
15 мар 19, 14:36    [21833896]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
listtoview
Member

Откуда:
Сообщений: 1776
Petro123,

хочется конкретики
а то один одно говорит
другой другое
15 мар 19, 15:34    [21833975]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
fkthat
Member

Откуда:
Сообщений: 874
Roman Mejtes
свойство не может быть волатильным


Ну так положи под свойство приватное поле и сделай его волатильным. Свойство не может быть волатильным, потому что ты нихера не понимаешь, походу, что такое волатильность.
15 мар 19, 15:40    [21833984]     Ответить | Цитировать Сообщить модератору
 Re: Автосвойства  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
fkthat
Roman Mejtes
свойство не может быть волатильным


Ну так положи под свойство приватное поле и сделай его волатильным. Свойство не может быть волатильным, потому что ты нихера не понимаешь, походу, что такое волатильность.
потому, что метод\свойства это не данные, потому оно не может быть волатильным.
дело не в понимании, речь шла о ограничениях и об автосвойствах.
15 мар 19, 15:49    [21833998]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 .. 25   вперед  Ctrl
Все форумы / WinForms, .Net Framework Ответить