在C#中,是否需要“this”关键字?

时间:2009-10-05 01:09:54

标签: c#

在以下构造函数中,是否需要'this'关键字?我知道我可以删除它,它符合,一切都很好。如果我省略'this'那将导致我的问题在路上?是否认为“这个”被认为是不好的做法?

    // Constructor:
    public Employee(string name, string alias)
    {
        // Use this to qualify the fields, name and alias:
        this.name = name;
        this.alias = alias;
    }

6 个答案:

答案 0 :(得分:20)

不,this在几乎所有情况下都是纯粹可选的。在您的示例中需要它的唯一原因是消除局部变量和参数以及碰巧具有相同标识符名称的成员变量之间的歧义。

您可以通过将参数或字段重命名为唯一的内容来避免使用this

答案 1 :(得分:9)

是的,您需要在代码示例中使用它。 C#将始终假设您的意思是局部变量,因此如果成员变量和局部变量存在同名,则必须使用this,否则将假定您指的是局部变量。

在您的代码示例中,如果您忽略this,则实际上是将name(或alias)的值分配给自身(因此无法完成任何操作)。

答案 2 :(得分:5)

this以下的情况下,

是绝对必需的。但是你可以通过仔细选择变量名来绕过它。我谦虚地认为,下面的例子没有任何问题,我不介意使用this。事实上,我经常使用this,即使在我的IDE中不需要提示智能感知和自动完成时也是如此。

internal class Something
{
    private string name;
    public Something(string name)
    {
        this.name = name;
    }
}

答案 3 :(得分:2)

它是可选的,除非你有一个名为'name'的成员变量,在这种情况下,你的行将分配给它自己。

我总是想用“this”访问所有成员变量,只是为了明确。有些人喜欢用“_”作为前缀,甚至是“m”。

答案 4 :(得分:0)

在C#中,最常见的是命名私有变量_Name或m_Name。这也使得在视觉上匹配属性变得容易,因为如果你有一个使用本地私有变量_Name的属性Name,很容易看到它的用途。

在您的示例中没有this关键字,您所做的只是将局部变量分配给局部变量(而不是私有变量)。这就是它编译的原因,但不会做你认为它正在做的事情。

答案 5 :(得分:0)

在你的例子中,如果你不使用“this”,会发生更糟糕的事情:“变量隐藏”