[英]C# 6 getters and setters
我正在使用C#6.0在类中创建属性的getter和setter:
private int _id { get; set; }
public int Id => _id;
但是编译器说:
无法将属性或索引器“Id”分配给 - 它是只读的
如何在不创建这样的getter和setter的情况下修复它:
private int _id { get; set; }
public int Id
{
get { return this._id; }
set { this._id = value; }
}
使用=>的简写语法只构造一个只读属性。
private int _id;
public int Id => _id;
这相当于auto-property,它是只读的:
public int Id { get; }
如果您希望您的属性既可设置又可获取,但公开只能获取,那么定义私有的setter:
public int Id { get; private set; }
这样你就不需要任何私人领域了。
同
private int _id { get; set; }
您正在使用getter和setter创建属性_id
。
同
public int Id => _id;
您正在创建仅具有getter的属性Id
并返回property _id
的值
我认为你正在混淆如何利用自动属性,因为这
private int _id { get; set; }
public int Id
{
get { return this._id; }
set { this._id = value; }
}
创建两个属性:带有自动生成的getter / setter的_id
和带有显式getter / setter的Id
,它只调用_id
的相应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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.