C# 在C中,是;这";需要关键字吗?

C# 在C中,是;这";需要关键字吗?,c#,C#,在以下构造函数中,是否需要“this”关键字?我知道我可以移除它,它符合要求,一切都很好。如果我省略“this”,这会给我带来麻烦吗?删除“此”是否被视为不良做法 // Constructor: public Employee(string name, string alias) { // Use this to qualify the fields, name and alias: this.name = name; th

在以下构造函数中,是否需要“this”关键字?我知道我可以移除它,它符合要求,一切都很好。如果我省略“this”,这会给我带来麻烦吗?删除“此”是否被视为不良做法

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

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

您可以通过将参数或字段重命名为唯一的名称来避免使用此。

这是可选的,除非您有一个名为“name”的成员变量,在这种情况下,您所在的行将被分配给自身


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

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


在您的代码示例中,如果忽略了
this
,则实际上是将
名称
(或
别名
)的值分配给了自身(因此什么也做不到)。

在下面的
情况下,这是绝对需要的。但您可以通过仔细选择变量名来绕过它。以我的拙见,下面的例子没有什么错,我不介意使用
这个
。事实上,我经常使用
这个
,即使它不是在IDE中提示intellisense和auto complete所必需的

internal class Something
{
    private string name;
    public Something(string name)
    {
        this.name = name;
    }
}
在C#中,最常见的是将私有变量命名为_name或m#u name。这也使得可视化地匹配属性变得很容易,因为如果你有一个属性名,它使用一个局部私有变量_Name,那么很容易快速地看到它的用途


在您的示例中,如果没有this关键字,您所做的只是将局部变量分配给局部变量(而不是私有变量)。这就是为什么它可以编译,但不会执行您认为它正在执行的操作。

在您的示例中,如果您不使用“this”,则会发生更糟糕的情况:“变量隐藏”

我一直在使用“\ux”,但最近我发现了大量使用“this”关键字的示例代码,如上图所示,因此,我更喜欢“这个”,因为它不会是一个错误;有人可能会意外地将局部变量命名为“u”,但使用
this
,这一点总是显而易见的。@sikly:适当的工具可以防止意外的局部变量以“
”开头。人眼也是如此。我更喜欢使用所有工具中最基本的工具(编译器)来查找我的错误。@Scott--这可能是因为人们开始在默认设置下使用StyleCop工具来自动执行编码标准。因此需要它。如果他不使用这个,那么代码就不能正常工作。它甚至会在没有“this”的情况下编译吗?它会编译,但会有警告。之所以需要它,是因为编译器会假定
name
表示参数,而不是省略
this
的所有情况下的字段。显然,它会编译,但程序中会有逻辑错误。“如果类实现基类(base vs.this)”,则“this”也可以与成员方法区分开来。另请参见:实际上,像u或m_u这样的符号的使用违反了嵌入在FxCop和StyleCop工具中的MSFT编码准则;MSFT编码标准要求使用“this.”前缀,即使实际上没有必要将字段与局部变量区分开来。@SteveGilham是对的,不要在C代码中使用m#前缀