[英]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.