我目前正在尝试了解这个'关键字,在.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;
}
}
所以我的问题是,因为在编写文档时,该关键字引用了该类的当前实例: 这是什么'当你将它与链接构造函数一起使用时,关键字是从类的当前实例引用的吗?
感谢您的回答
答案 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;
}
}