7

我通过尝试发现

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呢?

顺便说一句,我正在使用 dmd2 编译器。

4

2 回答 2

9

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

于 2012-08-23T16:05:29.267 回答
1

它允许您使用不带括号的无参数方法(如读取变量),并允许您调用不带括号的单参数方法,就像您分配给变量的方式一样。

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

void main()
{
    bar = foo;
}

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

于 2012-08-23T15:37:15.247 回答