3

次のような単純なクラス設定がある場合:

class MyClass
{
    private string _myName = string.Empty;

    public string MyName
    {
        get
        {
            return _myName;
        }
    }

    public void DoSomething()
    {
        // Get the name...
        string name = string.Empty;

        name = _myName;

        // OR

        name = MyName;

        // ...and do something with it...
    }
}

パブリック プロパティとデータ メンバーのどちらを使用する必要がありますか?

明らかに、この例ではどちらも同じ変数を参照しているだけなので、違いはありません。しかし、パブリック プロパティの実際の使用についてはどうでしょうか。

一般に、パブリック プロパティはほとんど実行されません。その場合、それらを呼び出しても問題ありませんか? それとも、内部クラス参照によって呼び出されるべきではない多くの機能をパブリック プロパティに入れていますか?

デバッガーでそれらを調べると予期しない結果が発生する可能性があるため、多くの機能をプロパティに配置しないことに関する別の投稿を見ました。本当?

4

4 に答える 4

8

プロパティを使用します。セッターとゲッター内にカプセル化される可能性のあるロジックは、クラス自体内であっても適用する必要があります。ゲッターとセッター内にロジックがない場合でも、フィールド自体を使用するのは安全ではありません。これらのフィールドへのアクセスにロジックを追加したい場合は、さらにリファクタリングする必要があるからです。

于 2009-07-02T18:39:28.630 に答える
5

一般的な慣行としてプロパティを参照する必要があると思います。この特定の例では、実際には大きな違いはありませんが、get/set アクセサーは、プロパティを取得するときにもう少し多くの作業を行う機能を提供します。たとえば、プロパティの「get」アクセサーの多くは、より複雑なデータ構造内でルックアップを実行したり、何も定義されていない場合はデフォルト値を設定したりします。クラスの残りの部分がこのロジックを利用できるように、プロパティを使用する習慣をつけます。あまり難しく考える必要がないように、実践を一般化しようとします。

基になるデータ メンバーに直接アクセスしたい場合もあるかもしれませんが、それは特定の理由による意識的な決定であり、例外になる傾向があります。

于 2009-07-02T18:42:39.233 に答える
2

プロパティは読み取り専用の状況を簡単に処理でき、必要な基本的な検証で簡単にラップできるため、私はプロパティを好みます。

于 2009-07-02T18:46:12.830 に答える
0

内部変数の値を返すだけの場合は、変数をパブリックにします - そうしても害はありません。値の表示または変更に応答して何かをしたいときは、常にパブリックプロパティを使用してきました-つまり、データベースに書き込み、他の何かを設定します(例の2番目の部分のように)。

あなたがしなければならない質問は、クラス内で起こっていることがこれらのイベントをトリガーしたいかどうかです。その場合、外部の呼び出し元と同じ方法で、プロパティを介して値にアクセスします。値を読み取るだけの場合は、内部変数を使用します。

あなたの質問に答えるために、どちらの方法でも害はありません.潜在的な副作用を考慮するだけです.

于 2009-07-02T18:40:27.380 に答える