我会尽力在这里回答您的问题,但是您的问题的某些方面尚不清楚。也许提供更多上下文会有所帮助,更好地解释您计划实现的目标以及更多用于上下文化的代码。
也就是说,我假设您正在询问 Genie 中类属性的语法。
属性是向您开发的类的用户隐藏实现细节的方法。根据 Vala 的教程,这一步也被称为计算机科学中的信息隐藏原理。
在 Vala 中,属性将通过以下方式在 a 中定义:
static int current_year = 2525;
class Person : Object {
private int year_of_birth = 2493;
public int age {
get { return current_year - year_of_birth; }
set { year_of_birth = current_year - value; }
}
}
在 Genie 中,它看起来像这样:
class Foo : Object
prop name : string
prop readonly count : int
[Description(nick="output property", blurb="This is the output property of the Foo class")]
prop output : string
get
return "output"
set
_name = value
现在是只写属性。基于这个和SO的这个问题,这是一个有争议的问题。只有当您不打算阅读您所写的内容时,它似乎才有用。但是正如您在上面的问题中看到的那样,大多数答案都建议创建方法而不是使用只写属性。
这将我们带到您指向的语法:
public int b { private get; set; }
你说这是 Vala 中只写属性的语法,这似乎是真的。这是因为,通过将 get 设置为私有,您可以防止用户读取该值。您也可以将 get 或 set 设置为在 Vala 中的私有部分,方法是将其排除在 set 块之外,即在 Vala 中您可以简单地删除私有 get部分。
现在这是我不确定的地方,但我建议您在代码中尝试一下。基于 Vala 通过从 set 块中删除它们来设置私有 getter 或 setter 的能力,我怀疑这同样适用于 Genie。
我从以下代码中删除了 get 的设置并对其进行了编译:
[indent=4]
class Foo : Object
prop name : string
prop readonly count : int
[Description(nick="output property", blurb="This is the output property of the Foo class")]
prop output : string
set
_name = value
init
var foo = new Foo()
也许这就是您正在寻找的东西,但我不确定它是否可以在实际代码中工作。如果没有,也许你会更好地使用方法。