2013-02-17 191 views
-2

我有以下代碼:C#獲取,設置屬性

private void button1_Click(object sender, EventArgs e) 
    { 
     Class1 myClass = new Class1("ttt"); 
     myClass.Name = "xxx"; 
     MessageBox.Show(myClass.Name); 
    } 

class Class1 
{ 
    string str = ""; 

    public Class1(string name) 
    { 
     str = name; 
    } 

    public string Name 
    { 
     get { return str; } 
     set; 

    } 
} 

起初我設置:

myClass.Name = "ccc"; 

,但後來將其改爲:

myClass.Name = "xxx"; 

也改變:

set {str = value;} 

到:

set; 

爲什麼當我運行它做我得到 「CCC」,而不是 「XXX」?

在我目前的代碼中有「ccc」。

+2

這顯示變化非常混亂。只需發佈您當前的代碼 - 理想情況下是一個簡短但完整的程序。 – 2013-02-17 14:50:36

+0

而這段代碼實際編譯? – leppie 2013-02-17 14:50:46

+0

'set;'沒有與之相關的操作。它什麼也沒做。 '{str = value;}'是實際**設置**屬性的部分。不可刪除。 – Brad 2013-02-17 14:51:58

回答

2

如下更改Name屬性:

public string Name 
{ 
    get { return str; } 
    set { str = value; } 
} 

答案你的問題,爲什麼你的「CCC」,而不是「XXX」的原因是,你有編譯錯誤。運行應用程序時,它會詢問您是否要運行最新的已知工作配置。你的程序最後一次編譯時,你使用了「ccc」作爲文字,並且這仍然在運行。

修復編譯錯誤,然後再次運行它,那麼這將是 「XXX」

4
public string Name 
{ 
    get { return str; } 
    set; 

} 

應該

public string Name 
{ 
    get { return str; } 
    set { str = value; } 
} 
0

模式

public string Name {get;set;} 

就是所謂的「自動實施的屬性」。

編譯器創建一個私人匿名支持字段,只能通過屬性的get和set訪問器訪問。

你原來的代碼似乎在做的是得到你定義的字段,但在匿名支持字段上的一組。因此,建立錯誤...