一尘不染

为C#自动属性赋予初始值的最佳方法是什么?

c#

如何为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;
    }
}

有没有更好的办法?


阅读 830

收藏
2020-05-19

共1个答案

一尘不染

在C#5和更早版本中,要为自动实现的属性提供一个初始值,您必须在构造函数中进行设置。

从C#6.0开始,您可以内联指定初始值。语法为:

public int X { get; set; } = x; // C# 6 or higher

DefaultValueAttribute打算由VS设计人员(或任何其他使用者)用来指定默认值,而不是初始值。(即使在设计对象中,初始值也是默认值)。

在编译时DefaultValueAttribute不会影响生成的IL,也不会读取它来将属性初始化为该值(请参见DefaultValue属性不适用于我的Auto
Property
)。

属性的例子影响IL是ThreadStaticAttributeCallerMemberNameAttribute

2020-05-19