Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# '的确切目的是什么;这';关键词_C#_This - Fatal编程技术网

C# '的确切目的是什么;这';关键词

C# '的确切目的是什么;这';关键词,c#,this,C#,This,因此,几天前我在Udemy上开始了C#的中级课程,老师在谈论“This”关键字。我知道它是用来引用类中的变量,而不是函数中的变量,但我觉得你还是可以不用它。让我举几个例子: public Customer(int id, string name) : this(id) { this.Name = name; } 我觉得“this.Name”部分是绝对没有必要的,因为我可以直接键入“Name=Name”,讲师说有时你会有类似的名称,只是为了确保你引用的变量正确,这样你就不会意

因此,几天前我在Udemy上开始了C#的中级课程,老师在谈论“This”关键字。我知道它是用来引用类中的变量,而不是函数中的变量,但我觉得你还是可以不用它。让我举几个例子:

public Customer(int id, string name) 
    : this(id) 
{
    this.Name = name;
}

我觉得“this.Name”部分是绝对没有必要的,因为我可以直接键入“Name=Name”,讲师说有时你会有类似的名称,只是为了确保你引用的变量正确,这样你就不会意外键入“Name=Name”或类似的内容,我相信“this”关键字肯定有更大的含义。

我同意你在上面的例子中的观点,this.Name=Name是没有意义的,事实上大多数编译器都会给你一个警告,说明这是不必要的

关键不是你可以有相似的名字,而是你可以有完全相同的名字:

private string name;
public Customer(int id, string name) : this(id) {
        this.name = name;
}

name
与类字段和局部变量的拼写完全相同是有效的语法。默认情况下引用局部变量,因此当存在具有完全相同名称的局部变量时,
用于引用类变量。因为否则就没有其他方法引用它们了。

我同意您在上面的示例中的观点,这个.Name=Name是没有意义的,事实上大多数编译器都会给您一个警告,说明没有必要这样做

关键不是你可以有相似的名字,而是你可以有完全相同的名字:

private string name;
public Customer(int id, string name) : this(id) {
        this.name = name;
}

name
与类字段和局部变量的拼写完全相同是有效的语法。默认情况下引用局部变量,因此当存在具有完全相同名称的局部变量时,
用于引用类变量。因为否则就没有其他方法来引用它们。

使用
这个
关键字的主要原因是,除了引用实例的字段外,还可以引用实例本身。考虑模式,例如:

interface Visitor {
    void Visit(Target target);
}
class Target {
    void Accept(Visitor visitor) {
        visitor.Visit(this); // not just a field but a whole instance
    }
}

使用
这个
关键字的主要原因是,除了引用实例的字段外,还可以引用实例本身。考虑模式,例如:

interface Visitor {
    void Visit(Target target);
}
class Target {
    void Accept(Visitor visitor) {
        visitor.Visit(this); // not just a field but a whole instance
    }
}

这不是调用仅以
id
作为参数的构造函数吗?这不是调用仅以
id
作为参数的构造函数吗?