我是从http://mobilemerit.com/android-app-for-usb-host-with-source-code/
阅读的for readonly:vala
public int b { get; private set; }
in Genie:
prop readonly b: int
for writeonly: VALA:
public int b { private get; set; }
精灵: [此行:语法错误]
prop writeonly b: int
如何在Genie中声明单行 writeonly 属性? 也许是这样的?
prop XXX b: int
我们可以写一个四行写的属性:
class Wonly
_b: int
prop b: int
set
_b = value
init
var w = new Wonly
// print w.b // ERROR!! writeonly!!
w.b = 456 // OK
但是如何编写一行的writeonly属性?
答案 0 :(得分:2)
我会尽力在这里回答你的问题,但问题的某些方面并不清楚。也许有助于提供更多的上下文,更好地解释您计划实现的目标以及更多用于上下文化的代码。
那就是说,我假设你在询问Genie中类属性的语法。
属性是隐藏您开发的类的用户的实现细节的方法。根据Vala的tutorial,这一举动也被称为计算机科学中的information hiding principle。
在Vala中,属性将按以下方式定义:
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的this和this问题,这是一个有争议的问题。它似乎只有在你不打算阅读你写的内容时才有用。但正如您在上述问题中所看到的,大多数答案都建议创建方法而不是使用只写属性。
这将我们带到您指向的语法:
public int b { private get; set; }
您声明这是Vala中只写属性的语法,似乎是真的。这是因为,通过将get设置为private,可以防止用户读取该值。您可以将其中的get或set设置为私有,方法是将其保留在set set之外,即在Vala中,您只需删除 private get 部分。
现在这是我不确定的地方,但我建议你在代码中尝试一下。基于Vala通过从集合块中删除它们来设置私有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()
也许这就是你要找的东西,但我不确定它是否适用于实际代码。如果没有,也许你会用方法做得更好。