2009-07-24 12 views
3
class Bar 
{ 
    private byte[] dg; 

    Bar(byte[] datagram) 
    { 
    dg = datagram; 
    } 

    int Foo 
    { 
    get { return BitConverter.ToInt16(dg, 8); } 
    } 
} 

プロパティの評価はいつですか? Fooにアクセスしたときは?すべてのプロパティを評価するデバッガが私を怖がらせています。C#プロパティの評価時間

+3

あなたのコードを使用している誰かがプロパティの評価が安い操作になると仮定しているので、プロパティgetterに広範な作業をさせるのは一般的には悪い考えです。そうでない場合は、 'GetFoo()'メソッドを使用してください。 – Thorarin

+1

この例では、最初に変換を行い、Fooで返されるように保存します。 –

+0

@Ed Swangren大部分が一度も使用されていないか、一度だけ使用されている場合は、大量のコンバージョンを保存するのはなぜですか。 @Thorarin私はメソッドがもっと良いだろうと同意します。しかし、良い文書でこのプロパティはうまくいくでしょう。人々が何かを言語のプロパティと同じように愚かにしたい場合は、それらを使うつもりです。 –

答えて

8

はい、プロパティは、getアクセサーメソッドへの呼び出しの構文砂糖です。プロパティが読み取られるたびに、メソッドが実行されます。はい、これにはデバッガが含まれています(プロパティgettorsに副作用があると、デバッグがプログラムの動作に実際に影響する可能性があります)。

2

はい、C#プロパティは特殊なメソッドの構文的な砂糖なので、他のタイプのインスタンスメソッドと同様に呼び出されると評価されます。