在 Getter 方法中使用 'this' 关键字
本文关键字:this 关键字 Getter 方法 | 更新日期: 2023-09-27 18:01:15
public string GetTitle()
{
return title;
}
正如您在上面的代码中看到的,在 GetTitle()
方法中,它用于返回标题实例变量。我的问题是,如果我添加"this"关键字,使GetTitle()
方法如下所示,会有什么区别:
public string GetTitle()
{
return this.title;
}
我还没有在书中或任何地方看到过后者的例子。但我在Visual Studio中尝试过这个,它仍然做同样的事情。
请有人解释一下有什么区别,如果有的话?
谢谢!:)
两者请有人解释一下有什么区别,如果有的话?
之间没有任何区别:
public string GetTitle()
{
return title;
}
而这个:
public string GetTitle()
{
return this.title;
}
this
引用类的实例。因此,您可以以title
或this.title
的形式访问该字段。
但是,我认为遵循上述方法来定义 getter 和 setter 没有任何内容。您可以使用以下语法来实现相同的目的,而不是遵循上述方法:
public string Title { get; set; }
每当你想阅读Title
,你只需使用以下
classInstance.Title
当您想要设置它的值时,您只需使用以下方法:
classInstance.Title = "your title";
在这两种情况下,classInstance
顾名思义是类的 n 个实例。
值得注意的是,上面称为自动实现的属性。在此之前,您可以执行相同操作的唯一方法如下:
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
现在,每当您想在get
或set
中应用任何逻辑时,都会使用以下语法。如果不是这种情况,则通常遵循自动实现的属性方法,因为它更紧凑。
public void SetTitle(string title)
{
this.title = title;
}
仅在这种情况下才需要this
,因为成员变量和参数具有相同的名称。
无论有无this
参数是否被调用intitle
或成员变量以外的任何其他名称,都不会有任何区别。
this (C# 参考(
this 关键字引用类的当前实例,并且 也用作扩展方法的第一个参数的修饰符。
也就是说,它确保引用的字段是当前实例的本地字段。
在您的特定上下文中,如果字段/变量是局部的,它们将意味着相同的事情。
如果字段是静态的,则以下示例将失败
static string title;
public string GetTitle() {
return this.title;
}
这仍然可以编译,但所有实例都将引用相同的静态字段
static string title;
public string GetTitle() {
return title;
}
它通常用于限定以相似名称隐藏的本地成员,例如:
public void SetTitle(string title) {
this.title = title;
}
实际上,您可以使用它或避免它,属性的上下文没有区别。因为当我们使用此属性时,我们也使用相同的实例使用变量。
如果您使用Resharper或类似的应用程序,那么它建议您使用它。基本上,使用this
关键字和最佳实践更安全。除了没有区别
this
关键字有几种用途,你可以在这里看看这个答案
public string GetTitle()
{
return this.title;
}
没有区别,添加"this"关键字不是必需的,但如果对您来说更清楚,您可以添加它。它只是更明确。
-
公共字符串 GetTitle(( { 返回标题; }
public void SetTitle(string title) { this.title = title; }
在 SetTitle(字符串标题(方法中,必须添加"this"关键字,因为您需要区分要更改的"title"变量。通过添加"this",您指的是对象"title"变量,而不是参数。
代码 1:
public string GetTitle()
{
return title;
}
代码 2:
public string GetTitle()
{
return this.title;
}
代码 1 和 2 没有任何区别。
两个代码具有相同的输出。我想分享的一件重要事情是,this
包含用于调用此GetTitle()
的对象reference