0

私は現在、新しい仕事のために vb.net を学んでおり、パブリック フィールドについて複雑な感情を抱いています。それらがカプセル化を傷つけているという多くの議論を目にします。Python では、物事をシンプルに保ち、十分な場合はフィールドを使用するのが一般的な方法です。後でロジックを追加したい場合は、クライアント コードを壊すことなくプロパティにリファクタリングするだけです。

私が使用しているコードベースには、次のような多数のプロパティを含む巨大なクラスがあります。

Private __GetDescriptionMode As Boolean
<DefaultValue(False)> _
 Public Property GetDescriptionMode() As Boolean
    Get
        GetDescriptionMode = __GetDescriptionMode
    End Get
    Set(ByVal Value As Boolean)
        __GetDescriptionMode = Value
    End Set
End Property

これは、内部にほとんど価値のない 10 行のコードです。ビジュアル スタジオのウィンドウでは、そのうちの 3 つをほとんど見ることができません。だから私は2つの質問があります:

  • 単純にフィールドを定義して、必要に応じてそれらをプロパティにリファクタリングしない正当な理由はありますか?
  • OOP の原則は、読みやすさを犠牲にするほど重要ですか? (私はより少ないものを見ることができます、私はそれらが特別なことをしていないことを確認するためにプロパティを解析しなければなりません、など)

編集 私の最初の質問を明確にするために:フィールドを単純なプロパティに変更すると、クライアントコードを壊す可能性がありますか?

4

2 に答える 2

3

フィールドではなくプロパティを作成することをお勧めします。

  • パブリック フィールドをパブリック プロパティに変更すると、クライアント コードが壊れる可能性があります。
  • プロパティでのみデータバインディングを使用できます。
  • インターフェイスではフィールドを使用できません
  • パブリック フィールドをパブリック プロパティに変更すると、バイナリ シリアル化コードが壊れます。
  • リフレクションを使用している場合、後でフィールドをプロパティに変更すると、リフレクション コードが破損する可能性があります。

詳細については、Vb.Net チームによるこのブログ投稿、またはC# の同じ問題に関するJon Skeetのこの記事を参照してください。

Visual Basic 2010 以降では、自動プロパティを使用します

Public Property GetDescriptionMode As Boolean
于 2012-06-07T10:46:39.000 に答える
2

私見は、最初にプロパティを設定する価値があります。

  • 他の誰かがプロパティを必要とするとき、あなたは他の誰かの人生をより困難にしている可能性があります.
  • また、多くの依存関係を持つプロジェクトへの不必要な修正を意味する場合もあります。
  • プロパティによって占有されるスペースが気に入らない場合は、Region
  • リフレクション/データ バインディングなどのさまざまなことで、フィールドに問題が発生する可能性があります。

VS2010 の時点で、この問題は自動プロパティの出現により大幅に解消されることは言うまでもありません。上記は次のように要約されます。

Public Property GetDescriptionMode As Boolean
于 2012-06-07T09:42:17.243 に答える