2011-10-15 7 views
6

同じクラスの他のメンバーにアクセスする必要のないプライベートメソッドを作成する場合、プライベートメンバーとレットバインディングのどちらを選択しますか?プライベートメンバーとレットバインディングの選択方法は?

  • 私はプライベートメンバーを使用する傾向があります。なぜなら、必要に応じてアクセシビリティを変更する方が簡単だからです。選択をする際に留意すべき点はありますか?
  • バインドはプライベートメンバーとしてコンパイルされます(これはスタイル選択のみになります)。

答えて

10

セクションの関連部分は、8.6.2です。それは述べて:

のクラスで「せ」 バインディングで宣言された値に使用されるコンパイル済みの表現はどちらかである:

  • 値が でない場合は、オブジェクトのコンストラクタ(とローカルな値構文上の機能は、変更可能ではなく、いずれの関数またはメンバでも使用されません)。

  • 対応するCLIタイプのインスタンスフィールド(値が の場合、構文関数ではなく一部の関数またはメンバーで使用されます)。

  • 対応するCLIタイプのメンバ(値が 統語関数の場合)。

  • また

のメンバーの種類や機能結合が離れて最適化し、 はに対してローカルな値となっているのいずれかで使用されていない

非機能せバインディング結果のCLIコンストラクタ同様に、関数 バインディングは、インスタンスメンバーとして表されます。

私はより機能的であるため、プライベートメンバーへのバインディングを好むと言います。つまり、「どのように」「どのように」を強調します。コンパイラは最適なコンパイル済みフォームを処理します。

5

letクラス内のバインディングはプライベートです。 letとプライベートmemberの主な違いは、letバインディングはオーバーロードできず、this.Name()ではなくname()で呼び出されるということです。そのように、私はそれが主に文体の選択だと思う。

0

letバインディングはクラスインスタンスからアクセスすることはできませんが、private methodすることができます。例:

type A() = 
    let someUtil() = "util code" 

    member private this.AnotherUtil() = "anotherUtil" 

    member private this.DoSomething() = 
     let anotherA = A() 
     A.someUtil() // compilation failed 
     A.AnotherUtil() // ok 
関連する問題