簡體   English   中英

在C#中傳遞與類字段變量同名的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM