使用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#中传递与类字段变量具有相同名称的参数,您会使用什么?
答案 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;
}
(是的,我曾经习惯使用“这个。”但发现它很麻烦且容易出错)