2016-06-22 8 views
1

このmicrosoft articleのプロパティとメソッドの使用方法について読むと、少し混乱します。c#プロパティとメソッドの選択

次のコード例では、プロパティへのアクセスは計算安価であることを前提としてい 完全なアプリケーションを示しています。彼らが言う下部の例で

。 EmployeeDataクラスは、配列のコピー を返すプロパティを間違って定義します。

具体

EmployeeDataクラスが誤ってアレイの コピーを返すプロパティを定義します。

正しい方法はありますか?

fiddle of the example code

+1

記事を読まずに推測すると、コピーは高価になる可能性があり、プロパティ(データアクセスのみを意味する)ではなくメソッド(実行する作業を暗示する)が必要です。このプロパティは配列の参照を返します(これが適切であれば)。配列のコピーではありません。 – Conduit

+0

このテキストを「代わりにメソッドを使用する必要があります」と展開します。 –

答えて

1

これは単なるガイドラインですが、あなたの特性は、可能な限り軽量でなければなりません。例のように、配列をコピーすることは、プロパティに対して非常に広範囲です。方法でなければなりません。このようにして、このコードを使用する人は誰でもそれが少し時間がかかることがあることを知っています。プロパティは通常、プライベートフィールドのアクセサーを反映しているため、人々はそれがほぼ即座に戻ることを期待しています。これが理にかなってほしい。

+0

これはちょうどクリックした、正しい方法は従業員がプロパティを取得し、CopyEmployeeRecords()を呼び出すと、他の開発者はそれが '高価な'関数を呼び出すことを知っているので削除するでしょうか? –

+0

@SvenBまさに!これは、誰かに計算的に集中する可能性があることを伝えること以外は何も変化させません(フィールドを返すだけではありません) –

1

内部のコードが遅いため、このプロパティは「間違っています」。

public EmployeeRecord[] Employees() 
{ 
    return CopyEmployeeRecords();  // slow code in method - ok 
} 
0

以下の状況で、むしろ性よりも、この方法を使用する:

public EmployeeRecord[] Employees 
{ 
    get 
    { 
     return CopyEmployeeRecords(); // slow code in property - bad 
    } 
} 

代わりに、メソッドを書きます。

あなたが読んでいる記事の中で、プロパティの代わりにメソッドを使用すると、配列を返します。

これを行う正しい方法は、配列をコピーするメソッドを作成することです。

関連する問題