在构造函数中使用'this'关键字

时间:2010-11-19 17:36:22

标签: c#

以下两个代码有什么区别。在构造函数中使用'this'关键字有什么用。

例1:

public Product(string name){
this.Name = name;
}

例2:

public Product(string name){
Name = name;
}

我知道这是指调用对象。只是我无法得到差异?

有人可以解释一下吗?

7 个答案:

答案 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.NameName更明确。使用this可以更清楚地了解代码的作用;但在这种情况下,编译器将以相同的方式解释它们。

答案 5 :(得分:1)

我不同意这里的其他人说使用“this”更明确。绝对是。在您给出的示例中,属性“Name”与其获得的一样明确。如果我们有另一个关键字的字母数多于“this”,那么它就不会更明确了。

Name

并不比

明确
this.Name

也不比以下无意义

更明确
thisIsNotAKeyWordButItMeansThis.Name

答案 6 :(得分:0)

这是一种风格问题。像其他人所说的那样,IL没有区别。就个人而言,我喜欢看到访问该类成员时使用的this.前缀。实际上,默认的StyleCop规则需要它。它只是清楚地说明了会员的来源。