2017-08-27 50 views
1

我指定在C#中的公共財產是這樣的:在哪些情況下,私有變量不是爲C#中的公共屬性生成的?

public bool SuezCanalTransversal {get; set;} 

然而,似乎沒有私有成員變量被創建。例如,如果我重寫get,並且return _suezCanalTransversal;我看到:

"_suezCanalTransversal does not exist in the current context"

簡單地添加關聯的私有成員變量是我自己的問題,但我的印象是現在已經自動完成了。

幾個問題:

當私有成員變量自動爲公共屬性生成壓根就沒有什麼時候?

當使用公共財產如public bool SuezCanalTransversal{ get; set;}時,假設一個私有變量是否正確:private bool _suezCanalTransversal將被創建?

+0

看到的是https:// stackoverflow.com/questions/8817070/is-it-possible-to-access-backing-fields-behind-auto-implemented-properties。 –

+1

[是否可以訪問自動實現的屬性後面的後臺字段?](https://stackoverflow.com/questions/8817070/is-it-possible-to-access-backing-fields-behind-auto-實現屬性) – Patrick

+0

有一個私有變量,但它有一個不同的,編譯器生成的名稱,你不能訪問它(除了反射)你不應該能夠訪問它;你應該使用這個屬性。 –

回答

7

編譯器生成支持變量,並且不能依賴任何用於命名該支持變量的命名約定或模式。

支持變量只在編譯時聲明,所以你不能在源代碼中訪問它。

如果你想訪問的後盾變量,只有一個解決辦法:不要使用自動屬性,但聲明的屬性「舊派」,像這樣:

private int _suezCanalTransversal; 

public int SuezCanalTransversal 
{ 
    { get return _suezCanalTransversal; } 
    { set _suezCanalTransversal = value; } 
} 
相關問題