在C#中传递与类字段变量同名的参数

时间:2010-12-15 20:23:35

标签: 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#中传递与类字段变量具有相同名称的参数,您会使用什么?

6 个答案:

答案 0 :(得分:4)

你可以这样做。只需使用:

public void SetUid(int uid) { this.uid = uid; }

答案 1 :(得分:4)

class Terminal {
    int uid;

    public void SetUid(int uid) { this.uid = uid; }
}

但是,我会考虑使用属性:

class Terminal {
    public int Uid { get; set; }
}

Getter和setter方法通常会闻到不正确的C#设计,因为属性会让你将getter / setter机制包裹成一小段语法糖。

答案 2 :(得分:3)

在C ++中它不是self,而是this,它在C#中实际上是相同的;

 public void SetUid(int uid)
 {
    this.uid = uid;
 }

答案 3 :(得分:1)

public void SetUid(int uid) {this.uid = uid;}

答案 4 :(得分:1)

我们没有将参数命名为与我们的字段相同,因为它令人困惑。代码的读取频率远远高于写入代码,因此可读性至关重要。必须在心理上解码哪个uid是参数,哪个是字段,这是不值得的。

我们实际上在字段中使用下划线前缀,以使其立即明显是什么字段以及什么是参数/本地。我知道不是每个人都喜欢这种惯例,但我们觉得它很有帮助。

此外,对于像您正在编写的SetXxx方法,我们通常只是按照C#属性设置器的约定命名参数value。由于只有一个参数,并且您已经知道方法名称的含义,“value”和“uid”一样有意义。

所以在我们的商店里,你的例子可能最终看起来像这样:

public class Terminal {
    private int _uid;

    public void SetUid(int value) {
        _uid = value;
    }
}

假设uid是只写的。如果它是读写的,我们当然会使用属性而不是getter / setter方法。

答案 5 :(得分:0)

我开始养成使用“the”为参数添加前缀的习惯,如“you”或“the_uid”,如果您更喜欢下划线。

public void SetUID(int theUID) {
    uid = theUID;
}

这比“值”更有用,特别是如果你有多个参数:

public Actor(String theName, String theFilm)
{
    name = theName;
    film = theFilm;
}

(是的,我曾经习惯使用“这个。”但发现它很麻烦且容易出错)