В прошлой теме были рассмотрены объекты на C#. Напомню, что каждому объекту реального мира в соответствие ставится класс, описывающий его структуру и набор операций, которые могут выполняться самим объектом, либо же проводиться над ним.

Свойства

Свойства в C# представляют собой отдельную структуру данных. В теме «Объекты на C#» был приведен пример кода:

/// <summary>
/// Класс "Персонаж".
/// </summary>
class Character
{
    /// <summary>
    /// Имя персонажа.
    /// </summary>
    public string Name;

    /// <summary>
    /// Пол.
    /// </summary>
    public string Gender;

    /// <summary>
    /// Сила.
    /// </summary>
    public double Strength;

    /// <summary>
    /// Ловкость.
    /// </summary>
    public double Agility;

    /// <summary>
    /// Объем здоровья.
    /// </summary>
    public double Health;
}

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

Аксессоры

Итак, чтобы превратить открытые переменные в свойства, достаточно добавить { get; set; } после каждой из переменных. get и set — это аксессоры, при помощи которых может быть прописана логика установки и чтения значений закрытых свойств. Приведем написанный выше код к корректному виду.

/// <summary>
/// Класс "Персонаж".
/// </summary>
class Character
{
    private string _name;

    /// <summary>
    /// Имя персонажа.
    /// </summary>
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (!String.IsNullOrEmpty(value))
            {
                _name = value;
            }
            else
            {
                throw new ArgumentException($"Передана пустая строка: {nameof(_name)}");
            }
        }
   }

   private string _gender;

    /// <summary>
    /// Пол.
    /// </summary>
    public string Gender
    {
       get
       {
           return _gender;
       }
       set
       {
           if (!String.IsNullOrEmpty(value))
           {
               _gender = value;
           }
           else
           {
               throw new ArgumentException($"Передана пустая строка: {nameof(_gender)}");
           }
       }      
    }

    private double _strength;

    /// <summary>
    /// Сила.
    /// </summary>
    public double Strength
    {
        get
        {
            return _strength;
        }
        set
        {
            if (value > 0)
            {
                _strength = value;
            }
            else
            {
                throw new ArgumentException("Сила не может быть меньше нуля.");
            }
       }
    }

    private double _agility;

    /// <summary>
    /// Сила.
    /// </summary>
    public double Agility
    {
        get
        {
            return _agility;
        }
        set
        {
            if (value > 0)
            {
                _agility = value;
            }
            else
            {
                throw new ArgumentException("Ловкость не может быть меньше нуля.");
            }
        }
     }

     private double _health;
 
     /// <summary>
     /// Сила.
     /// </summary>
     public double Health
     {
         get
         {
             return _health;
         }
         set
         {
             if (value > 0)
             {
                  _health = value;
             }
             else
             {
                  throw new ArgumentException("Здоровье не может быть меньше нуля.");
             }
         }
      }
  }

Аксессор get отвечает за получение значения некоторой закрытой переменной или свойства, set, напротив, обрабатывает логику установки значения переменной, либо свойства. В примере, представленном выше, вы можете заметить ключевое слово value. Оно обозначает значение, которое пришло свойству извне и должно быть обработано. Кроме полной формы аксессоры могут использоваться в сокращенном виде: { get; set; }, — таким образом мы говорим, что свойство может быть и установлено, и прочитано извне. При необходимости аксессорам могут быть указаны модификаторы доступа, чтобы ограничить их доступность.

Персонаж с полосой hp

Персонаж с полосой hp

В общем-то это все, что необходимо знать о свойствах в C#. Удачных вам экспериментов, коллеги.

Также рекомендую изучить статью Объекты на C#

P.S. Присоединяйся в любой удобной для тебя социальной сети. Для меня очень важно оставаться с тобой на связи, ведь у меня есть еще много полезной информации о программировании для тебя, которой я хочу с тобой поделиться.

Вконтакте
Telegram
Facebook
Twitter
Одноклассники
Дзен
Google+

 
×
%d такие блоггеры, как: