簡體   English   中英

C#6 getter and setters

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM