4

これは私があまり一貫していないことであり、他の人が何をしているのか常に興味があります.

内部プロパティ (プライベートまたはパブリック) にどのようにアクセスしますか?

たとえば、次のプロパティがあります。

Private _Name As String

Public Property Name() As String
    Get
        Return _Name
    End Get
    Set(ByVal value As String)
        _Name = value
    End Set
End Property

別の関数内の同じクラスで、どちらが好きですか? なぜ?

_Name = "Johnny"

また

Name = "Johnny"

Me.Name の代わりに Name を使用したという事実は無視してください。

4

5 に答える 5

12

個人的には、可能であればプロパティを使用することを好みます。これは、引き続き検証を取得し、プロパティ アクセスに簡単にブレークポイントを設定できることを意味します。これは、互いに検証する 2 つのプロパティに変更を加えようとしている場合には機能しませんmin <= max。(C#):

public void SetMinMax(int min, int max)
{
    if (max > min)
    {
        throw new ArgumentOutOfRangeException("max";
    }
    // We're okay now - no need to validate, so go straight to fields
    this.min = min;
    this.max = max;
}

将来のある時点で、C# がプロパティ内でバッキング フィールドを宣言できるようになり、プロパティだけにプライベートになるようにしたいと考えています。

public string Name
{
    string name;

    get { return name; }
    set
    {
        if (value == null)
        {
            throw new ArgumentNullException("value");
        }    
        name = value;
    }
}

nameプロパティの外では、まったく取得できませんName。これは、自動的に実装されたプロパティ用に既に用意されていますが、ロジックを含めることはできません。

于 2008-12-10T11:45:59.590 に答える
2

私は言うだろう

Name = "Johnny"

その理由は、Name を割り当てるときに何らかの検証 (またはトリガー、遅延初期化など) を行うか、後で検証を挿入することを決定する可能性があり、そのコードを確実にトリガーしたいからです。

于 2008-12-10T11:46:08.857 に答える
1

私が好む:

Name = "Johny"

私にとって、理由は非常に単純です。_Name で何か問題が発生した場合、いつでも getter/setter に出力を入れて、問題の原因を突き止めることができます。

于 2008-12-10T11:44:19.783 に答える
0

これは非常に興味深いことです。ほとんどの人が私と同じことをしていると思います。

Me.Name = "Johnny"

また

Name = "Johnny"

しかし、私が見たプロジェクトのほとんどは

_Name = "Jonny"

スタイル。これは悪い考えでしたが、回答のおかげで確認できました。いくつかのツールによって自動コード生成されたコードのほとんどでさえ、直接アクセスを使用します。

特定のパフォーマンスへの影響はありますか? または、set または get に余分なコードがない場合、コンパイラはそれを最適化します。

于 2008-12-10T12:06:33.717 に答える
0

プロパティ (名前) を使用します。プロパティは、基になるフィールド (_name) の唯一の「所有者」であるべきだと思います。

プロパティの下にフィールドをカプセル化する利点:

  • 読みやすさ: 返される前に _name が変更または処理されたコードの 1 つの領域のみ。
  • ブレークポイントの設定、デバッグなどを簡単に行うことができます。
  • DRY: 検証と処理に関する限り、コードは繰り返されません。
  • 回復力の変更: 検証と処理を変更しても、プロパティを使用するコードには影響しません。
于 2009-04-11T19:14:35.963 に答える