为什么有些人用“这个”

本文关键字:这个 为什么 | 更新日期: 2023-09-27 17:58:19

可能重复:
';的目的是什么;这';关键字。

你好,

我有个问题。我四处看了看,但似乎不明白。



为什么有些程序员在某些东西前面使用this?类似:

this.button1 = String.Empty;

在MSDN中,我从来没有见过使用this.,除非this.指的是表单本身,比如:

this.WindowState = FormWindowState.Minimized;

这就是我们真的应该引用的东西吗?或者,这样做有没有额外的好处?到目前为止,我还没有体验到任何明显的好处,也没有注意到任何变化。


谢谢:-)

为什么有些人用“这个”

关键字this通常用于明确变量的来源。例如,一个大函数可能有许多变量,使用这些变量可以判断正在设置的类的哪些是真正的属性,哪些是函数变量。

此外,请考虑下面的示例,其中需要使用关键字来区分类变量和函数参数。

object one;
object two;
public MyClass(object one, object two)
{
    this.one = one;
    this.two = two;
}

实际上,您使用this来引用容器对象。使用this有时在解决以下合并情况时很有用:

public class Person
{
    private String name;
    public Person(String name)
    {
         this.name = name;
    }
}

但是,您可以通过更改私有字段/变量的名称来避免使用此选项:

public class Person
{
    private String _name;
    public Person(String name)
    {
         _name = name;
    }
}

这意味着这个对象:如果你在一个窗体中,那就是窗体,如果你在简单的类中,那是你的类。我们不应该使用它(它是隐含的),但有时你需要它来使代码非常清晰,或者在以下情况下是必要的:

class MyClass
{
    private int tot = 0;
    public MyClass(int tot)
    {
        this.tot = tot;
    }
}

请查看http://msdn.microsoft.com/en-us/library/dk1507sz(v=vs.71).aspx。大多数情况下,我们使用它来确保我们引用的是可能被隐藏的类的成员。MSDN的例子是:

public Employee(string name, string alias) 
{
   this.name = name;
   this.alias = alias;
}

在代码中使用this关键字将区分哪些区域是当前作用域中类的属性和方法。这也意味着我们使用的是实例方法和属性,而不是静态方法和属性。

这也意味着我们必须首先实例化它。

因此,它将提高代码的可读性和意义,尤其是在一个大型软件开发团队中,代码将共享给其他人。

当在比您的对象更局部的范围中存在另一个button1时,类似this.button1的东西是必要的。

this.表示法被windows表单生成器系统地使用,这可能是您看到它的地方。

例如,当成员变量名称与方法参数相同时,this.用于消除歧义。

除此之外,这是一个品味问题,但我相信大多数程序员不会使用它,因为它打字很长(但我想说,可读性更强一点)。

请记住,使用"this."有时是强制性的。例如,当分配与构造函数参数同名的字段值时,例如

public class MyClass{
    private string name;
    public MyClass(string name) {
        this.name = name; // <== This is mandatory
    }
}

对于编译器来说,它是相同的。Form将控件作为字段,添加this关键字只需向读者提示我们正在使用Form字段

这是不必要的(没有它代码会很好地工作),但它确实使方法或字段的归属更加清晰。如果您在最挑剔的设置中使用StyleCop,Microsoft建议您使用此样式。

编辑:事实上,大多数时候这是不必要的,但正如其他几个答案所提到的,这有时对于解决冲突是必要的。

SomeNameSpace.SomeClass.SomeMethod() 
SomeNameSpace.SomeClass.OtherMethod()

当你在SomeMethod()内时,说你想打OtherMethod()。使用this可以避免每次使用时都必须写入SomeNameSpace.SomeClass.OtherMethod()

由于您已经在SomeClass中,当您在SomeMethod()中工作时,this将引用SomeClass。因此,引用OtherMethod()所要做的就是转到:this.OtherMethod()

如果您需要将SomeNameSpaceSomeClass更改为其他名称,这是一个很好的快捷方式,也将使您的程序在未来更容易维护。。this仍将按照您的预期工作。

namespace Foo {
  public class Bar {
    public void Method() {
      // Do Other Stuff
    }
    public void OtherMethod() {
      // Do Some Stuff
      this.Method(); // Do Other Stuff
      // Instead of Foo.Bar.Method()
    }
  }
}

这不是强制性的,但我相信遵循这种做法的主要原因是为了提高可读性。例如,它使读者很容易区分局部变量和方法参数。

public class User
{
    string firstname;
    string lastname;
    public User(string firstname, string lastname)
    {
        this.firstname = firstname;
        this.lastname = lastname;
    }
}