public string GetTitle()
{
return title;
}
正如您在上面的代码中所看到的,在GetTitle()
方法中,它被用于返回标题实例变量。我的问题是,如果我添加'this'关键字使得GetTitle()
方法变为如下所示,会有什么不同:
public string GetTitle()
{
return this.title;
}
我没有在书中看到过一个例子,也没有看过后者的任何例子。但我在Visual Studio中尝试了这个,它仍然做同样的事情。
请有人解释一下有什么区别吗?
谢谢! :)
答案 0 :(得分:4)
请有人解释一下有什么区别吗?
之间没有任何区别:
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
,因为它的名字暗示是你班级的一个实例。
值得注意的是,上述内容称为自动实现属性。在此之前,你可以做同样的事情的唯一方法是:
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
现在,只要您想在get
或set
中应用任何逻辑,就会使用以下语法。如果不是这种情况,那么通常会遵循自动实现的属性方法,因为它更紧凑。
答案 1 :(得分:1)
public void SetTitle(string title)
{
this.title = title;
}
仅在这种情况下需要this
,因为membervariable和参数具有相同的名称。
如果参数被称为this
或者除了成员变量以外的任何其他名称,如果有或没有intitle
,则没有任何区别。
答案 2 :(得分:1)
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;
}
答案 3 :(得分:0)
实际上,您可以使用它或避免,属性的上下文没有区别。因为当我们使用这个属性时,我们也使用相同的实例来使用变量。
如果你使用Resharper或类似的应用程序,那么它会建议你使用它。基本上,使用this
关键字以及最佳实践更安全。除了它没有区别之外
使用this
个关键字时,您可以查看此答案here
答案 4 :(得分:0)
public string GetTitle()
{
return this.title;
}
没有区别,添加“this”关键字不是必需的,但是如果它对你来说更清楚,你可以添加它。它只是更明确。
-
public string GetTitle() { 回报标题; }
public void SetTitle(string title)
{
this.title = title;
}
在SetTitle(字符串标题)方法中添加“this”关键字是必要的,因为您需要区分要更改的“标题”变量。通过添加“this”,您指的是对象“title”变量,而不是参数。
答案 5 :(得分:0)
代码1:
public string GetTitle()
{
return title;
}
代码2:
public string GetTitle()
{
return this.title;
}
代码1和2没有任何区别。
两个代码都有相同的输出。我要分享的一件重要事情是this
包含用于调用此reference
GetTitle()
对象