【问题标题】:A Better Way to Define a Read-Only Property in Vala在 Vala 中定义只读属性的更好方法
【发布时间】:2014-06-19 03:55:08
【问题描述】:

阅读 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?

【问题讨论】:

    标签: properties readonly vala


    【解决方案1】:

    没有。如果你能做到public int age { get; },价值从何而来?

    你可能想要的是:

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

    【讨论】:

    • 我设置了一个默认值,例如public int age { get; default = 32; }。我的假设是 Vala 会很聪明并设置初始值,但从不公开 setter 方法。
    • 但是您还需要一种设置属性的方法,否则public const int AGE = 32; 会更有意义。您可以将 getter 与没有 setter 的实现一起使用,因为您可以计算值(例如,从 age_in_days 字段)或从其他任何地方获取它。但是,对于自动吸气剂,我真的无法想象它是有意义的情况。
    • 在这种情况下,值可能来自绕过(不存在的)设置器,让拥有的类直接访问支持变量。这不是它在 Vala 中的工作方式,但我更喜欢这样。在工作时,private set 在我看来有点多余。
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2010-11-14
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多