C# 6 getter 和 setter

C# 6 getters and setters

我正在使用 C# 6.0 在 class 中创建属性的 getter 和 setter,如下所示:

private int _id { get; set; }

public int Id => _id;

但是编译器说:

Property or indexer 'Id' cannot be assigned to -- it is read only

如何在不创建像这样的 getter 和 setter 的情况下修复它:

private int _id { get; set; }

public int Id 
{
   get { return this._id; }
   set { this._id = value; }
}

Shorthand 语法 with => only 构造一个只读的 属性.

private int _id;
public int Id => _id;

这相当于 auto-属性 是只读的:

public int Id { get; }

如果您希望您的 属性 既可设置又可获取,但仅公开可获取,则定义私有 setter:

public int Id { get; private set; }

这样你就不需要任何私有字段了。

private int _id { get; set; }

您正在创建一个 属性 _id 和一个 getter 和一个 setter。

public int Id => _id;

您正在创建一个 属性 Id,它只有 getter 和 returns 属性 _id[=22 的值=]

我认为您混淆了如何利用自动属性,因为这

private int _id { get; set; }

public int Id 
{
   get { return this._id; }
   set { this._id = value; }
}

创建两个属性:_id 自动生成 getter/setter 和 Id 显式 getter/setter 只调用 [=14 的相应 getter/setter =].

没有自动 属性 功能,你必须这样写:

private int _id;

public int Id 
{
   get { return this._id; }
   set { this._id = value; }
}

这里,_id是一个字段,Id是一个属性。

这是 C# 7.0 语法,以防万一您想保留私有字段:

public int Id 
{
   get => _id;
   set => _id = value;
}
private int _id;

这对于完全访问包装对象的某些属性非常有用:

private Person wrappedObject;

public string Name
{
   get => wrappedObject.Name;
   set => wrappedObject.Name = value;
}