C# Properties

property 使用一个 field(通常是 private)作为 backing store,包含两个 accessors

class Person
{
    // field
    private string name;

    // property
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}

Auto-Implemented Properties

上面声明的 property 可以简写为:

public string Name { get; set; }

这时 compiler 会创建一个私有的匿名 field。

Property initializer

property 在声明时可以初始化:

public string Name { get; set; } = "Ivan Yan";

这里 compiler 直接初始化 field,不经过 setter。

Accessibility

public string Name { get; set; }

可读可写。

public string Name { get; }

外部只读。只有在 constuctor 内初始化。

public string Name { get; private set; }

外部只读。不能用 object initializer。

Expression body definitions

只有一个语句的 members(比如这里所说的 properties)可以使用 expression body definitions。

private string _name;

public string Name {
    get => _name;
    set => _name = value;
}

// readonly
public string Name => _name;