[英]passing parameter that has the same name of class field variable in C#
使用C ++,我可以編寫如下代碼。
class Terminal {
int uid;
public:
void SetUid(int uid) {self.uid = uid;}
};
我在C#中嘗試過類似的東西,但是我收到了一個錯誤。 我試過以下,但它看起來很難看。
class Terminal {
int uid;
public void SetUid(int uid_) {uid = uid_;}
}
當你想在C#中傳遞一個具有相同名稱的類字段變量的參數時,你會使用什么?
你可以這樣做。 只需使用:
public void SetUid(int uid) { this.uid = uid; }
class Terminal {
int uid;
public void SetUid(int uid) { this.uid = uid; }
}
但是,我會考慮使用屬性:
class Terminal {
public int Uid { get; set; }
}
Getter和setter方法通常會聞到不正確的C#設計,因為屬性會讓你將getter / setter機制包裹成一小段語法糖。
在C ++中,它不是self
,而是this
,它在C#中實際上是相同的;
public void SetUid(int uid)
{
this.uid = uid;
}
public void SetUid(int uid) {this.uid = uid;}
我們沒有將參數命名為與我們的字段相同,因為它令人困惑。 代碼的讀取頻率遠遠高於寫入代碼,因此可讀性至關重要。 必須在心理上解碼哪個uid
是參數,哪個是字段,這是不值得的。
我們實際上在字段中使用下划線前綴,以使其立即明顯是什么字段以及什么是參數/本地。 我知道不是每個人都喜歡這種慣例,但我們覺得它很有幫助。
另外,對於像你正在編寫的SetXxx方法,我們通常只是按照C#屬性setter的約定命名參數value
。 由於只有一個參數,並且您已經知道方法名稱的含義,“value”和“uid”一樣有意義。
所以在我們的商店里,你的例子最終可能會像這樣:
public class Terminal {
private int _uid;
public void SetUid(int value) {
_uid = value;
}
}
這是假設uid是只寫的。 如果它是讀寫的,我們當然會使用屬性而不是getter / setter方法。
我已經開始養成使用“the”為參數添加前綴的習慣,如“you”或“the_uid”,如果您更喜歡下划線。
public void SetUID(int theUID) {
uid = theUID;
}
這比“值”更有用,特別是如果你有多個參數:
public Actor(String theName, String theFilm)
{
name = theName;
film = theFilm;
}
(是的,我曾經習慣使用“這個。”但發現它很麻煩且容易出錯)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.