以下两个代码有什么区别。在构造函数中使用'this'关键字有什么用。
例1:
public Product(string name){
this.Name = name;
}
例2:
public Product(string name){
Name = name;
}
我知道这是指调用对象。只是我无法得到差异?
有人可以解释一下吗?
答案 0 :(得分:6)
示例1使用对this
的显式引用。这不是真正需要的,因为在这种情况下没有歧义。如果参数被称为Name
,则需要显式this
来解决歧义。
答案 1 :(得分:4)
在您提供的示例中,它是完全可选的。
主要是,它隐含地告诉用户使用的成员是当前类对象的一部分。
一种做法是将参数与成员或字段区分开来,如下所示:
public class Customer {
private string name;
public Customer(string name) {
this.name = name;
}
}
为了便于阅读,可以将this
放在name
字段前面,以明确name
参数的值已分配给此 class'name
字段。
在这种情况下,它是必要的,因为构造函数参数和字段都具有相同的名称。否则,如果它们是不同的变量名称,this
关键字将是可选的。
答案 2 :(得分:3)
在这种情况下,没有区别。明确的更常见的原因是这样的:
public Product(string name){
this.name = name;
}
此时绝对需要this
,否则它将是从参数到其自身的无操作分配(这将引发警告,IIRC)。
答案 3 :(得分:2)
在发射IL方面绝对没有区别。这只是为了可读性。当您使用this
时,您会更明确。
答案 4 :(得分:1)
this.Name
比Name
更明确。使用this
可以更清楚地了解代码的作用;但在这种情况下,编译器将以相同的方式解释它们。
答案 5 :(得分:1)
我不同意这里的其他人说使用“this”更明确。绝对是不。在您给出的示例中,属性“Name”与其获得的一样明确。如果我们有另一个关键字的字母数多于“this”,那么它就不会更明确了。
Name
并不比
明确this.Name
也不比以下无意义
更明确thisIsNotAKeyWordButItMeansThis.Name
答案 6 :(得分:0)
这是一种风格问题。像其他人所说的那样,IL没有区别。就个人而言,我喜欢看到访问该类成员时使用的this.
前缀。实际上,默认的StyleCop规则需要它。它只是清楚地说明了会员的来源。