我現在正在參加一個C#課程,我正試圖找出最好的方法。我來自Java背景,所以我只熟悉Java最佳實踐;我是C#新手!吸氣劑,固體劑和性質最佳實踐。 Java與C#
在Java中,如果我有私人財產,我這樣做;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
在C#中,我發現有很多方法可以做到這一點。
我能做到像Java:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
或者,我可以這樣來做:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
或者:
public string Name { get; set; }
哪一個我應該使用,以及什麼每種方法都包含哪些警告或微妙之處?在創建類時,我遵循從Java中知道的一般最佳實踐(尤其是閱讀Effective Java)。例如,我贊成不變性(只在需要時才提供給定員)。我只是很好奇,看看這些實踐如何適應用C#提供setter和getter的各種方式;從本質上講,我如何將Java世界的最佳實踐轉化爲C#?
編輯
我張貼此爲喬恩斯基特的答案評論,但隨後得到了久:
怎麼樣一個不平凡的性質(即具有顯著處理和驗證也許)?我仍然可以通過公開財產揭露它,但邏輯封裝在get
和set
?爲什麼會/應該通過專用的setter和getter方法(以及相關的處理和驗證邏輯)來做到這一點。
更確切的:任何代碼reiew會指出,Java的方式是繞過有效的langauge和運行一個黑客(!)構造並終止屬性的使用作爲proeprty(即object.property =「value」)。在一些團隊中,這會引發一場關於態度的良好談話 - 取決於資歷和激勵,以便將這種態度用於競爭對手。嚴重的是,不要打仗LANGAUGE。特別是因爲java的「方式」是爲了不修改不動產支持的語言而選擇的黑客。 – TomTom 2011-02-09 18:24:10
我想好消息是我的回答似乎與您提到的任何內容都不矛盾。壞消息是你的手指比我的快得多。偉大的洞察力,並感謝增加的細節。 – jeremyalan 2011-02-09 18:37:25
要回答你的編輯:你可以使用get/set方法以及你想要的任意數量的邏輯。我們經常這樣做,特別是對於驗證。但是,最佳實踐並不是在屬性中包含很多緩慢的邏輯(例如數據庫訪問),危險邏輯(異常拋出)或突變(更改很多狀態)。預計財產或多或少會像一個簡單的狀態。更多的東西應該用一個函數來表示。 – CodexArcanum 2011-02-09 20:38:23