Лучший способ определить свойство, доступное только для чтения, в Vala

#properties #readonly #vala

#свойства #только для чтения #vala

Вопрос:

Читая документы Vala, я вижу, что есть сокращение для определения свойства:

 public class Person : Object {
    public int age { get; set; default = 32; }
}
 

Я попытался определить переменную, доступную только для чтения, удалив set; ее из списка, но я получаю сообщение об ошибке компиляции, что должен быть определен получатель. Я прибегнул к использованию формы longhand:

 public class Person : Object {
    private int _age = 32;

    public int age {
        get { return _age; }
    }
}
 

Есть ли способ использовать сокращенную нотацию для определения установщика?

Ответ №1:

Нет. Если бы вы могли просто сделать public int age { get; } , откуда взялось бы значение?

Вероятно, вам нужно:

 public class Person : Object {
  public int age { get; private set; }
}
 

Комментарии:

1. Я установил значение по умолчанию, например public int age { get; default = 32; } . Я предполагал, что Vala будет умным и установит начальное значение, но никогда не предоставит метод установки.

2. Но вам также понадобится способ установки свойства, в противном public const int AGE = 32; случае это имело бы больше смысла. Вы можете использовать средство получения с реализацией без средства установки, потому что вы могли бы вычислять значение (например, из поля age_in_days) или получать его из другого места. Однако с автоматическим получателем я действительно не могу представить ситуацию, когда это имеет смысл.

3. В этом случае значение может быть получено в обход (несуществующего) установщика, позволяя классу-владельцу напрямую обращаться к резервной переменной. В Vala это работает не так, но я бы предпочел, чтобы это было так. Во время работы private set выглядит немного излишним для меня.