在D
中测试以下内容import std.stdio;
struct S
{
int _val;
@property ref int val() { return _val; }
@property void val(int v) { _val = v; writeln("Setter called!"); }
}
void main()
{
auto s = S();
s.val = 5;
}
输出"Settter called!"
作为输出。
编译器使用什么规则来确定是调用第一个还是第二个实现?
答案 0 :(得分:5)
这里提供两个@property
方法,一个接受参数,另一个不接受。在执行s.val = 5;
时,您实际执行的操作是s.val(5)
,但由于val
是@property
,您可以将其编写为属性而不是方法调用(请参阅{ {3}})。从s.val(5)
编译器可以执行标准重载解析 - 请参阅http://d-programming-language.org/function.html#property-functions。