Какой смысл определять свойство, которое выглядит ниже?Что это приносит в контексте герметизации? - PullRequest
0 голосов
/ 11 февраля 2019

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

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

class MyClass
    {
        //1 - read and write property short record
        public string Name1 { get; set; } = "Name1 content";

        //2 - variable instead of property from 1 ex.
        public string Name2 = "Name2 content";

        //3 - read and write property long record
        private string _name3 = default(string);
        public string Name3
        {
            get => _name3;
            set => _name3 = value;
        }

        //4 - read and write property with checking of value
        private string _name4 = default(string);
        public string Name4
        {
            get
            {
                return _name4;
            }
            set
            {
                if (value.Length >= 3)
                    _name4 = value;
            }
        }

        //5 - read only property short record
        public string Name5 { get; } = "Name5 content";

        //6 - read only variable
        public static readonly string Name6 = "Name6 content";

        //7 - read (public) and write (in class range) property
        private string _name7 = default(string);

        public MyClass(string n)
        {
            this._name7 = n;
        }

        public string Name7
        {
            get => _name4;
            private set => _name7 = value;
        }
    }

Пример.1 В чем преимущество объявления свойств, в точности как это, вместо переменной (пример 2)?Я знаю, что свойства можно использовать в интерфейсах, а не в полях (переменных), но есть ли какое-то другое преимущество?

Пример.3 не имеет смысла для меня, но он представлен в большинстве примеров применения свойств.Это не обеспечивает (на мой взгляд) инкапсуляцию _name3, потому что каждое изменение Name3 (извне) вызывает изменение _name3 (в MyClass)

Пример.4 имеет смысл для меня.Но используются ли свойства на практике только для проверки условий ввода?Это можно сделать в конструкторах.

Пример.5 и отл.6 похожи на Ex.1 и отл.2. Если я хочу заблокировать возможность изменения значения Name5, я могу использовать переменную readonly вместо свойства (как в примере 6).

Пример7 - единственный пример использования свойств для инкапсуляции, который я обнаружил и изменил._name7 / Name7 можно установить снаружи только конструктором.Тогда я могу изменить его только из MyClass.

Не могли бы вы, кроме ответа на мои сомнения, привести несколько примеров наиболее распространенного практического использования свойств?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...