我应该通过属性设置器在C#中分配类字段吗?

Ant*_*son 0 c# oop design-patterns

这样做的正确方法是什么?属性setter可能包含的代码多于acctual赋值.可以说我有以下代码:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是错误的,因为我没有通过属性分配?

Tim*_* S. 8

  1. 除非你有充分的理由不这样做,否则你应该使用属性Name而不是字段name,即使是在同一个类中,也要确保始终使用get/ setmethods 中的逻辑.
  2. 由于您明确指定了set实现,因此还必须显式指定get要编译的示例的实现.
  3. 在大多数情况下,您应该使用String.IsNullOrEmpty,而不是像您的String.Empty.Equals(value)代码那样的其他方法.
  4. 属性通常应该以不令人惊讶的方式表现.在你跑完之后person.Name = "";,你会期待这个Name属性,而""不是以前的属性.如果设置null或空名称无效,则在传递此值时应抛出异常.

    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;
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)