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

问题描述:

b/w以下两个代码有什么不同?在构造函数中使用'this'关键字有什么用处。在构造函数中使用'this'关键字

例1:

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

出2:

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

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

有人可以解释一下吗?

+0

“要获得通过的成员相似的名字隐藏”不太明显的不那么明显。它在这里解释:http://msdn.microsoft.com/en-gb/library/dk1507sz(v=vs.90).aspx – Saturnix 2013-09-06 09:05:40

示例1使用对this的明确引用。这并不是真的需要,因为在这种情况下不存在歧义。如果该参数改为Name,则需要显式this来解决不明确性。

就发射IL而言绝对没有差异。这只是为了可读性。当你使用this你更明确。

在您提供的示例中,它是绝对可选的。

它主要隐含地告诉用户与之合作的成员是当前类对象的一部分。

的一个做法是,以区别于成员或字段的参数如下所示:

public class Customer { 
    private string name; 

    public Customer(string name) { 
     this.name = name; 
    } 
} 

为了增强可读性的缘故,一会就把thisname字段前要清楚的是,name参数的值被分配到这个类'name字段。

在这种情况下,它是必要的,因为构造函数参数和字段都具有相同的名称。否则,如果它们是不同的变量名称,则this关键字将是可选的。

+0

在这里给出的例子中,“this”是* not * optional - 代码具有和不具有“this”的不同含义。 – razlebe 2010-11-19 18:01:46

+0

第二个“this”在此特定示例中不是可选的。 – 2010-11-19 18:13:41

+0

我公开了一种情况,它确实不是可选的,而这正是我想告诉OP的。用不同的名称(字段和构造函数参数),'this'就成为可选项。我没有得到降价... – 2010-11-19 18:23:06

this.NameName更明确。使用this可以让代码更加明显。但在这种情况下,编译器将以相同的方式解释它们。

在这种情况下,没有区别。为是明确的更常见的原因是这样的:

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

在这一点上this是绝对需要的,否则它会从参数无操作分配本身(这将引发警告,IIRC )。

这是一个风格问题。像其他人所说的那样,在IL中没有区别。就个人而言,我喜欢在访问课程成员时使用this.前缀。实际上,默认的StyleCop规则需要它。它只是明确了成员来自哪里。

我不同意这里的其他人说使用“这个”更明确。最肯定的是而不是。在你给出的例子中,属性“Name”与其得到的一样明确。如果我们有另一个字母比“this”更多的字母,它就不会更明确。

Name 

this.Name 

这也不外乎以下废话

thisIsNotAKeyWordButItMeansThis.Name