2017-07-03 48 views
4

D的语言reference指出d - 用两个参数

@property功能只能拥有零,一个或两个参数性能。

很清楚零和一个参数具有哪些属性,并且每个参考都有一个示例。但是,参考文献中没有提及任何有关双参数属性的内容,除了它们允许的事实之外。那么,他们究竟做了什么?这种属性的参数是什么意思?

回答

6

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

struct Whatever { 
    void setProperty(int); 
} 

你想添加的,而不是调用的setProperty属性setter,但不能改变结构本身无论出于何种原因。您可以添加外部函数是这样的:

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

然后,你可以把它叫做:

Whatever w; 
w.my_prop = 10; 

所以第一个参数是扩展this和第二参数是传统的设定值。