在构造函数中使用私有变量或属性

时间:2015-01-07 23:05:04

标签: c#

    class Person 
{
    private string fname;
    private string lname;

    public string F 
    {
        get { return fname; }
        set { fname = value; }
    }

    public string L
    {
        get { return lname; }
        set { lname = value; }
    }

    public Person(string fname, string lname) 
    {
        this.fname = fname;
        this.lname = lname;
    }
}

哪个更好,在构造函数中使用属性,还是保持它在上面?为什么?

P.S。我正在使用一个使用属性的函数,这就是我没有使用自动属性的原因。

3 个答案:

答案 0 :(得分:3)

如果你想要一个不可变的类,请执行以下操作:

class Person 
{
    public string F { get; private set; }
    public string L { get; private set; }

    public Person(string f, string l) 
    {
        F = f;
        L = l;
    }
}

对于一个可变类,请执行以下操作:

class Person 
{
    public string F { get; set; }
    public string L { get; set; }
}

并像这样使用它:

Person p = new Person { L = "laugh", F = "fun" };

答案 1 :(得分:1)

这并不重要,在您的情况下,我会使用自动实现的属性,因为您没有在getter或setter中执行任何工作。

class Person 
{
    public string F { get; set; }

    public string L { get; set; }

    public Person(string fname, string lname) 
    {
        F = fname;
        L = lname;
    }
}

答案 2 :(得分:0)

  • 如果调用者在构造之后必须修改它们,请使用属性 对象。
  • 如果呼叫者必须阅读,则使用仅限get属性,但不能 改变它们。
  • 使用构造函数参数强制调用者 创建具有"良好状态的对象" (例如,非空的第一个和最后一个 名称)