#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
выглядит немного излишним для меня.