如何给C#自动属性一个初始值?

我要么使用构造函数,要么恢复到旧语法。

使用构造函数:

class Person 
{
    public Person()
    {
        Name = "Initial Name";
    }
    public string Name { get; set; }
}

使用普通属性语法(具有初始值)

private string name = "Initial Name";
public string Name 
{
    get 
    {
        return name;
    }
    set
    {
        name = value;
    }
}

有更好的方法吗?


当前回答

当内联变量的初始值时,无论如何都会在构造函数中隐式完成。

我认为这种语法是C#中的最佳实践,最高可达5:

class Person 
{
    public Person()
    {
        //do anything before variable assignment

        //assign initial values
        Name = "Default Name";

        //do anything after variable assignment
    }
    public string Name { get; set; }
}

因为这样可以清楚地控制分配的顺序值。

从C#6开始,有一种新的方式:

public string Name { get; set; } = "Default Name";

其他回答

从C#6.0开始,我们可以为自动实现的财产指定默认值。

public string Name { get; set; } = "Some Name";

我们还可以创建只读的自动实现属性,如:

public string Name { get; } = "Some Name";

参见:C#6:第一反应,自动实现财产的初始化程序-Jon Skeet

您是否尝试过将DefaultValueAttribute或ShouldSerialize和Reset方法与构造函数结合使用?我觉得如果要创建一个可能出现在设计器表面或属性网格中的类,这两个方法中的一个是必要的。

我知道这是一个老问题,但当我在寻找如何使用重写选项继承默认值时,我想到了

//base class
public class Car
{
    public virtual string FuelUnits
    {
        get { return "gasoline in gallons"; }
        protected set { }
    }
}
//derived
public class Tesla : Car
{
    public override string FuelUnits => "ampere hour";
}

使用构造函数是因为“当构造函数完成时,构造应该完成”。财产类似于类的状态,如果必须初始化默认状态,可以在构造函数中进行初始化。

在构造函数中。构造函数的目的是初始化它的数据成员。