Урок 1. Свойства с одним методом доступа (ReadOnly и WriteOnly свойства)


#1

Как и было описано в предыдущей статье, не всегда свойства должны иметь оба метода доступа, в таком случае свойства могут иметь только один нужный метод доступа, например:

private double pi = 3.14D;
private double e = 2.71D;

// Свойство только для записи.  - WriteOnlyProperty
public double Pi
{
     set 
     {
          pi = value; 
     }
}

// Свойство только для чтения.  -  ReadOnlyProperty
public double E
{
     get 
     { 
          return e; 
     }

     private set
     {
          e = value;
     }
}

Свойства, которые имеют только метод-мутатор, называются свойствами только для записи или же WriteOnly свойства.

Свойства, которые имеют только метод-аксессор, называются свойствами только для чтения или же ReadOnly свойства.

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

Также бывают ситуации, когда свойства должны иметь оба метода доступа, но пользователь должен иметь возможность использовать только одно из них, в таком случае можно к нужному методу доступа отдельно дописать модификатор доступа private (но у всего свойства модификатор доступа всё также должен быть public!):

classMyClass
{
     public string name;

     public string Field
     {
          private set  // void SetField(string value)   -    Метод-мутатор - mutator   (setter)
          {
               if (value != "fool")
               {
                    name = value;
                }
               else
               {
                    Console.WriteLine("try set fool");
               }
          }

          get  // string GetField()   -    Метод-аксессор - accessor (getter)
          {
               if (name == null)
                    return "name == null";
               else
                    return name;                 
          }            
     }
}

В таком случае при попытке обращения к данному свойству пользователь будет знать, что у свойства есть методы доступа, но при этом один из них закрыт для его использование извне класса:


Содержание справочника С# Essential