在 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中尝试过这个,它仍然做同样的事情。

请有人解释一下有什么区别,如果有的话?

谢谢!:)

在 Getter 方法中使用 'this' 关键字

请有人解释一下有什么区别,如果有的话?

两者

之间没有任何区别:

public string GetTitle()
{
    return title;
}

而这个:

public string GetTitle()
{
    return this.title;
}

this引用类的实例。因此,您可以以titlethis.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; }
}

现在,每当您想在getset中应用任何逻辑时,都会使用以下语法。如果不是这种情况,则通常遵循自动实现的属性方法,因为它更紧凑。

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