D - 具有两个参数的属性

D - properties with two arguments

D 的语言 reference 指出

@property functions can only have zero, one or two parameters.

具有零个参数和一个参数的属性的作用非常清楚,参考资料中每个都有一个示例。但是,除了允许使用双参数属性外,该参考文献并未提及任何有关双参数属性的信息。那么,他们实际上做了什么? 属性 的参数是什么意思?

具有两个参数的 属性 将是一个 UFCS setter。假设我们有:

struct Whatever {
   void setProperty(int);
}

并且您想添加一个 属性 setter 而不是调用 setProperty,但无论出于何种原因都不能更改结构本身。您可以像这样添加一个外部函数:

@property int my_prop(ref Whatever _this, int prop_value) {
       _this.setProperty(prop_value);
       return prop_value;
}

那你就可以调用了:

Whatever w;
w.my_prop = 10;

所以第一个参数是扩展this,第二个参数是传统设置值