为什么在D中使用@property?

时间:2012-08-23 15:33:30

标签: properties d

通过尝试

我想通了
struct PropertyTest
{
    @property int x() { return val; }
    @property void x( int newVal ) { val = newVal; }

    void test()
    {
        int j;
        j = x;
        x = 5;
    }

private:
    int val;
}
当我离开@property时,

完全相同。一切都很好。那么将函数声明为@property是什么意思?

BTW,我正在使用dmd2编译器。

2 个答案:

答案 0 :(得分:9)

他们在没有@property的情况下工作的原因是因为在@property允许属性方法语法之后添加了-property。将@property添加到DMD命令行会强制使用-property注释。出于向后兼容性原因,它不是默认设置。有一天它会成为默认值(或者他们说),所以最好用{{1}}进行编译,以确保正确地进行注释。

答案 1 :(得分:1)

它允许你使用没有括号的无参数方法(比如读取变量),它允许你调用没有括号的单方法,就像你赋给变量一样。

@property int foo() { ... }
@property void bar(int x) { ... }

void main()
{
    bar = foo;
}

您应该将-property指定为编译器的命令行选项。