0

これを行う正しい方法は何ですか?プロパティ セッターには、実際の割り当て以外のコードが含まれている場合があります。次のコードがあるとしましょう:

class Person
{
    private String name;

    public Person(String name)
    {
        this.name = Name
    }

    public String Name
    {
        get;
        set {
            if(String.Empty.Equals(value)) return;
            this.name = value;
        }
    }
}

プロパティを介して割り当てていないため、上記のコードは間違っていますか?

4

3 に答える 3

8
  1. 特別な理由がない限り、同じクラスであってもNamefield の代わりにproperty を使用して、 /メソッドnameのロジックが常に使用されるようにする必要があります。getset
  2. 実装を明示的に指定するため、コンパイルする例setの実装も明示的に指定する必要があります。get
  3. ほとんどの場合、コードString.IsNullOrEmptyのような他のアプローチではなく、 を使用する必要がありString.Empty.Equals(value)ます。
  4. プロパティは通常、驚くべき方法で動作する必要があります。を実行した後、プロパティは以前のものではなく、 になるperson.Name = "";と予想されます。null または空の名前の設定が有効でない場合は、そのような値が渡されたときに例外をスローする必要があります。Name""

    class Person
    {
        private String name;
    
        public Person(String name)
        {
            this.Name = name;
        }
    
        public String Name
        {
            get {
                return this.name;
            }
            set {
                if(String.IsNullOrEmpty(value))
                    throw new ArgumentException("Name is required", "value");
                this.name = value;
            }
        }
    }
    
于 2013-08-08T14:57:16.323 に答える
1

セッターはクラスの不変条件を維持するために存在するため、一般に、プロパティ セッターを介して割り当てる必要があります。セッターをバイパスすると、バッキング フィールドを直接変更するときにこれらの不変条件を手動で維持する必要があり、バグにさらされ、DRY原則に違反する可能性があります。

セッターをバイパスすることでパフォーマンスが大幅に向上することがすでに証明されている場合は、このルールを無視してかまいません。

于 2013-08-08T14:53:59.027 に答える