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;
}
我正在使用 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;
}