Properties 在Vala中定义只读属性的更好方法

Properties 在Vala中定义只读属性的更好方法,properties,readonly,vala,Properties,Readonly,Vala,通过阅读Vala文档,我发现有一个定义属性的简写: public class Person : Object { public int age { get; set; default = 32; } } 我试图通过删除set来定义只读变量,但我得到一个编译错误,必须定义getter。我已经求助于使用手写形式: public class Person : Object { private int _age = 32; public int age { g

通过阅读Vala文档,我发现有一个定义属性的简写:

public class Person : Object {
    public int age { get; set; default = 32; }
}
我试图通过删除
set来定义只读变量,但我得到一个编译错误,必须定义getter。我已经求助于使用手写形式:

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

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

有没有一种方法可以使用简写符号来定义setter?

没有。如果你可以只做
public int{get;}
,那么这个值从哪里来

您可能想要的是:

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

我设置了一个默认值,比如
public int age{get;default=32;}
。我的假设是Vala很聪明,可以设置初始值,但不会公开setter方法会更有意义。您可以在实现中使用getter而不使用setter,因为您可以计算值(例如,从age_in_days字段)或从其他任何地方获取值。然而,对于自动getter,我真的无法想象它有什么意义。在这种情况下,该值可能来自绕过(不存在的)setter,让所属类直接访问支持变量。这不是瓦拉的工作方式,但我更喜欢这样。工作时,
private set
对我来说有点多余。