2012-08-23 18 views
7

私は@propertyアウトを離れるときDで@propertyを使用する理由

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とは何ですか?

私はdmd2コンパイラを使用しています。

+1

現時点では、コンパイラは将来的に許容されるよりも許容的です。 getterとsetterを@propertyでマークするのは、将来の証明には良い方法です。未来がどうなるかを見るには、-propertyを使ってコンパイルしてください。 –

答えて

9

@propertyなしで動作する理由は、プロパティメソッドの構文を許可した後に@propertyが追加されたためです。 DMDコマンドラインに-propertyを追加すると、@property注釈の使用が強制されます。下位互換性の理由から、デフォルトではありません。いつかはデフォルトになります(つまり、彼らが言うように)。-propertyとコンパイルして、正しく注釈を付けることをお勧めします。

1

これは、括弧なしの(変数の読み込みのような)無引数のメソッドを使用できるようにします。変数に代入する方法で、かっこなしの単一引数メソッドを呼び出すことができます。

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

void main() 
{ 
    bar = foo; 
} 

コンパイラのコマンドラインオプションとして、-propertyを指定する必要があります。

関連する問題