定义'这个' .NET文档中的关键字

时间:2017-07-11 16:31:23

标签: c# constructor this

我目前正在尝试了解这个'关键字,在.NET文档中是:

  

this关键字引用类的当前实例,并且是   也用作扩展方法的第一个参数的修饰符。

我第一眼学到了这个'关键字是如何解决范围歧义,当类数据字段与构造函数中的示例参数同名时。像这样:

class Person
{
    public string name;

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

这里使用'这个'关键字通知C#编译器我想使用名为' name'的变量它应该来自当前的类实例范围,而不是方法范围。例如,如果我在托管堆上创建Person类的对象并引用此对象,我将其分配给名为' p1',statement' this.name'实际上是' p1.X' (我知道我不能把它写成这样的代码,但只是为了更好的想象力)。如果它是正确的那样,那么.NET文档中的定义对我来说对这个例子有意义。

但如果我使用'这个'链接构造函数的关键字?

我再次知道它的作用,但我真的不知道这个'这个'关键字是从当前的类实例使用?在范围模糊的第一个例子中,它是有意义的,但在链接构造函数中,我真的不知道它与任何类实例有什么关系,因为它没有使用实例中的任何东西,它只是传递传入主构造函数的参数。

链接构造函数的示例:

class Person
{
    public string name;
    public int? age;

    public Person(string name): this(name, null) { }

    public Person(string initName, int? initAge)
    {
        name = initName;
        age = initAge;
    }
}

所以我的问题是,因为在编写文档时,该关键字引用了该类的当前实例: 这是什么'当你将它与链接构造函数一起使用时,关键字是从类的当前实例引用的吗?

感谢您的回答

2 个答案:

答案 0 :(得分:3)

  

当你使用链接构造函数时,'this'关键字从类的当前实例引用了什么?

它指的是来自 this 类的构造函数调用(与 base 类中的构造函数进行比较)。

答案 1 :(得分:2)

public MyClass(string name, string id) : this(name)

this表示您将使用同一类中的另一个重载构造函数。

public class Person
{
    public Person(string name) : this(name, 0) // will call constructor with two arguments
    { }

    public Person(string name, string id)
    {
        Name = name;
        Id = id;
    }        
}