【问题标题】:The use of the 'this' keyword in Getter Methods?在 Getter 方法中使用“this”关键字?
【发布时间】:2016-08-07 14:41:46
【问题描述】:
public string GetTitle()
{
    return title;
}

正如您在上面的代码中看到的,在GetTitle() 方法中,它被用于返回title 实例变量。我的问题是,如果我添加 'this' 关键字,使GetTitle() 方法变为如下所示,会有什么不同:

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

我没有在书中或任何地方看到过后者的例子。但我在 Visual Studio 中尝试过,它仍然做同样的事情。

如果有的话,谁能解释一下有什么区别?

谢谢! :)

【问题讨论】:

    标签: c# methods this keyword getter


    【解决方案1】:

    如果有的话,谁能解释一下有什么区别?

    两者之间没有任何区别:

    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 顾名思义就是你的类的一个实例。

    这里值得注意的是,上述被称为自动实现的属性。在此之前,您可以这样做的唯一方法是:

    private string title;
    public string Title
    {
        get { return title; }
        set { title = value; }
    }
    

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

    【讨论】:

    • 一个全面的答案。我补充说,使用显式支持变量而不是自动获取/设置是您可以使用显式支持变量分配默认值。示例:私有字符串标题 = "";在您的最后一个代码块中将防止 NullReferenceException,并且自动获取/设置不能(直到最新的 C# 版本)分配默认值。出于这个原因,我建议使用显式支持变量;因此是“这个”。为了可读性。
    【解决方案2】:
    public void SetTitle(string title)
    {
     this.title = title;
    }
    

    只有在这种情况下才需要this,因为成员变量和参数具有相同的名称。

    如果参数被称为intitle 或成员变量以外的任何其他名称,则无论有无this 都没有任何区别。

    【讨论】:

      【解决方案3】:

      this (C# Reference)

      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;
      }
      

      【讨论】:

        【解决方案4】:

        其实可以使用也可以避免,属性的上下文没有区别。因为当我们使用这个属性时,我们也使用相同的实例来使用变量。

        如果您使用 Resharper 或类似的应用程序,那么它会建议您使用它。基本上使用this 关键字和最佳实践更安全。除了没有什么区别

        this关键字有几种用法你可以看看这个答案here

        【讨论】:

          【解决方案5】:
          public string GetTitle()
              {
                  return this.title;
              }
          

          没有区别,添加“this”关键字不是必须的,但如果对你来说更清楚,你可以添加它。它只是更明确。

          • -

            公共字符串 GetTitle() { 返回标题; }

            public void SetTitle(string title)
            {
                this.title = title;
            }
            

          在 SetTitle(string title) 方法中添加“this”关键字是必要的,因为您需要区分您正在更改的“title”变量。通过添加“this”,您指的是对象“title”变量,而不是参数。

          【讨论】:

            【解决方案6】:

            代码1:

             public string GetTitle()
                {
                    return title;
                }
            

            代码 2:

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

            代码 1 和 2 没有任何区别。

            两个代码具有相同的输出。我想分享的一件重要事情是this 包含用于调用此GetTitle() 的对象的reference

            【讨论】:

              猜你喜欢
              • 2017-11-30
              • 2022-11-20
              • 2019-01-05
              • 1970-01-01
              • 1970-01-01
              • 2017-04-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多