2016-12-09 104 views
1

我使用C#6.0中創建像一類的getter和屬性的setter方法:C#6 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; } 
} 
+0

@ Dr.Fre,這是編譯器的功能,而不是框架版本的基礎 – Fabio

+2

作爲一項規則,有這樣的事情,如果你發現自己瘋狂地猜測並隨意使用語言特徵,那麼你應該回頭重新模仿由熟悉語言的人編寫的代碼。 –

回答

6

只有=>的簡寫語法構造一個只讀屬性。

private int _id; 
public int Id => _id; 

這相當於它是隻讀的自動屬性:

public int Id { get; } 

如果你想你的財產既設定和gettable,但公開只是gettable,然後定義私人二傳手:

public int Id { get; private set; } 

這樣你就不需要任何私人領域。

2

隨着

private int _id { get; set; } 

要創建一個屬性_id有一個getter和一個setter。

隨着

public int Id => _id; 

你正在創建一個只有getter和返回的財產_id

我想你混淆如何利用自動屬性的值的屬性Id,因爲這

private int _id { get; set; } 

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

創建兩個屬性:_id與自動生成的getter/setter和Id與明確的getter/setter,只是調用相應的獲取/設置器_id

沒有自動屬性功能,你必須這樣寫:

private int _id; 

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

這裏,_id是一個領域,Id是一個屬性。

1

這是最新的語法,如果你想保持私人領域:

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

這是一個C#> = 7.0的語法,但不錯的貢獻! – Lucas