D的语言参考说明了这一点
@property函数只能有零个,一个或两个参数.
很清楚零和一个参数的属性是什么,并且在引用中有一个示例.但是,除了允许它们之外,该引用没有提及任何关于双参数属性的内容.那么,他们究竟做了什么?这种属性的参数是什么意思?
具有两个参数的属性将是UFCS setter.假设我们有:
struct Whatever {
void setProperty(int);
}
Run Code Online (Sandbox Code Playgroud)
并且您希望添加属性setter而不是调用setProperty,但无论出于何种原因都无法更改struct本身.您可以添加这样的外部函数:
@property int my_prop(ref Whatever _this, int prop_value) {
_this.setProperty(prop_value);
return prop_value;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以称之为:
Whatever w;
w.my_prop = 10;
Run Code Online (Sandbox Code Playgroud)
所以第一个参数是扩展this,第二个参数是传统的设置值.