代码之家  ›  专栏  ›  技术社区  ›  Sam

用这个。访问内部类成员?

  •  5
  • Sam  · 技术社区  · 15 年前

    在互联网上,我看到很多使用这个的代码。要访问类的本地成员,请执行以下操作:

    private String _whatever;
    public String Whatever
    {
      get
      {
        return this._whatever;
      }
      set
      {
        this._whatever = value;
      }
    }
    
    public void DoSomething()
    {
      String s = this.Whatever;
      this.DoSomething();
    }
    

    (不要期望代码做一些合理的事情。我只是想展示一下“这个”的不同用法。)

    我想知道为什么要这样做?为了增加源代码的清晰度?
    或者只是浪费空间?

    10 回复  |  直到 10 年前
        1
  •  1
  •   Hardryv    15 年前

    需要考虑的事项:

    编译器不会在意,我们中那些在你后面工作的人,即使我们不熟悉你的类结构,也会确切地知道你在做什么。

        2
  •  9
  •   Jorge Córdoba    15 年前

    这一切都归结为个人偏好和良好的实践。

    在大多数情况下,这并不重要,但当您碰巧有一个与私有字段同名的参数时(这无论如何都表示一个糟糕的命名约定),这可能会很重要。

    从我个人的观点来看,任何对参数或字段的变量引用,或者几乎任何没有“this”限定符的变量引用都应该足够清楚…只有当它不是并且你不能改变它使它成为那样的时候,我才用这个。

        3
  •  4
  •   TomTom    15 年前

    Stylecop中有一条规则要求-人们似乎只是使用它;)

        4
  •  3
  •   Hans Passant    15 年前

    奇怪的是,没有人提到这一点:它在智能感知方面工作得很好。键入“this.”并弹出有效成员名称列表。我很快就用“好吧,它使标识符的范围变得明显”来证明这一点。

        5
  •  2
  •   Sky Sanders    15 年前

    国际海事组织:

    this._member 
    

    是多余的

    反之

    this.Property
    

    是正当的。

        6
  •  1
  •   Rune    15 年前

    这样做是为了增加清晰度,特别是为了从实例成员中消除参数的歧义。我个人认为

    • 如果您使用的惯例是在私有变量前面加下划线,那么就编写它。blah是浪费空间
    • 在方法调用之前它是多余的
    • 在物业进入前是否合理还存在争议。

    总而言之,这是一个个人意见的问题(尽管和其他事情一样,你应该保持一致,并且与你的同事保持一致)。

        7
  •  1
  •   Henk Holterman    15 年前

    使用 this 在这种情况下是可选的,但它有助于消除歧义。代码生成器将始终使用 在这里,比找出是否有必要更容易(这是罕见的)。

    程序员把它当作一种品味。

        8
  •  0
  •   Andrew Bezzub    15 年前

    这是一个品味问题。一些开发人员通常 this 用于显示被引用对象是类的内部对象。只是合成糖。它还依赖于项目上的一些命名约定(例如,用下划线开始每个字段名)。

        9
  •  0
  •   yeyeyerman    15 年前

    每一个写 this 区分类数据可能有其自身的原因。有时是因为他们习惯了,有时是因为它是项目编码标准所要求的,也许他们正在使用这样的工具格式代码…

    另外,如果成员变量和参数或局部变量之间没有区别,比如在使用下划线的示例中,那么它是有用的。只是风格问题。

        10
  •  0
  •   Zenya    15 年前

    这是为了处理以下可能的情况:

    private String value;
    public String Whatever
    {
        get
        {
            return this.value;
        }
        set
        {
            this.value = value;
        }
    }
    

    事实上, this. 广泛用于以下示例中的情况:

    struct MyStruct
    {
        private int val1;
        private int val2;
    
        public MyStruct(int val1, int val2)
        {
            this.val1 = val1;
            this.val2 = val2;
        }
    }
    

    使用 这个。 尽可能使代码更清晰,并排除以下可能的错误:

    private int myVar;
    private void doSmth(int myVar)
    {
        // Some code here ...
        myVar = 5; // Are you sure this is one you want to modify?
        // Some code here ...
    }
    

    然而,这不是一个严格的规则,可能与个人编码风格有关。