2014-07-08 23 views
-4

我有幾個關於C#的問題,特別是編碼類。爲什麼C#代碼類與Java/C++不同?

採取下面的示例代碼:

public class Product 
{ 
    public string code; 
    public string description; 
    public decimal price; 

    public Product() 
    { 
    } 

    public string Code 
    { 
     get 
     { 
      return code; 
     } 
     set 
     { 
      this.code = value; 
     } 
    } 

} 

1)在C#中,爲什麼是場命名以小寫「c」的代碼,但是屬性代碼以大寫字母「C」?這對套管有影響嗎? 2)如果我保持外殼的方式,字段命名代碼(小寫字母c)和屬性名稱代碼(大寫字母c),會自動屬性,如下面的工作?爲什麼?

public string Code {get; set; } 

3)爲什麼我們不能編寫getCode和setCode屬性,例如在C++中,像下面的東西?它會起作用嗎?有沒有理由不這樣做?

public void setCode (c) 
{ 
    this.code = c; 
} 

public string getCode() 
{ 
    return this.code; 
} 
+0

「code」只是一個字符串變量。 「代碼」是財產。 – user1666620

+1

「它會工作嗎?」 - 試試看,你會發現。 –

+0

3.3在c#中,有些時候你想在屬性上使用getCode()和setCode()方法。屬性被認爲是快速訪問器,如果檢索或者設置的信息是複雜的,那麼get/setCode()方法將是首選。 –

回答

1

對套管有影響嗎?

是的 - C#區分大小寫。字段以小寫字母開頭,屬性以大寫字母開頭的事實只是慣例;沒有編譯器的魔力。

會像下面的自動屬性工作?爲什麼?

那麼它會編譯,但Code財產不會被連接到code場不再 - 編譯器會創建自己的私人支持字段。

爲什麼我們不能只編碼getCodesetCode屬性,如在C++中,像下面的東西?

,你可以,但你不能使用屬性語法來獲取/設置字段,因爲這些是方法,不性能。 C++沒有象C#那樣的getter和setter屬性的概念。

因此,代碼

string code = product.Code; 
product.Code = "foo"; 

將成爲

string code = product.getCode(); 
product.SetCode("foo"); 

(這其實是編譯器做幕後的東西 - 它只是使了漂亮的源代碼)

1

第一要注意的是,你的例子不是慣用的C#。在良好的C#中,code字段(也可能是其他字段)將是專用。然後,Code屬性是公共的,並且提供對類之外的私人code字段的訪問。大寫/小寫的東西在這裏只是慣例,並不是唯一的約定。有些人更喜歡使用m_甚至只是_作爲前綴,而不是改變大小寫。在需要與不區分大小寫的Visual Basic項目共享代碼的商店中尤其如此。

至於創建get/set方法:沒有理由不能在C#中做到這一點。但是,你爲什麼?該屬性正好是同樣的事情:屬性被編譯器翻譯成get/set方法。有一些屬性可以使構建get/set方法變得更容易,幫助您避免get/set方法的錯誤,幫助您更好地表達類型的含義,允許在更長的表達式中使用更清晰的語法,並減少在一個類型的公共接口中混亂(兩種方法現在作爲單個屬性公開)。

相關問題