为什么有些人使用`这个?

时间:2011-06-01 07:05:44

标签: c# .net wpf winforms

  

可能重复:
  What is the purpose of 'this' keyword in C#.

您好,

我对某事有疑问。我环顾四周,但似乎无法弄明白。

<小时/>

为什么有些程序员在某事前使用this?像:

this.button1 = String.Empty;

在MSDN中,我不记得看到this.被使用,除非this.指的是表单本身,如下所示:

this.WindowState = FormWindowState.Minimized;

这是我们真正应该引用的东西吗?或者,这样做是否有额外的好处?到目前为止,我没有经历任何明显的好处,我没有发现任何变化。


谢谢: - )

12 个答案:

答案 0 :(得分:10)

关键字this通常用作明确变量来源的方式。例如,一个大函数可能有很多变量,使用它可以用来说明正在设置的类的真正属性,以及什么是函数变量。

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

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

答案 1 :(得分:8)

实际上,您使用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;
    }
}

答案 2 :(得分:6)

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

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

答案 3 :(得分:6)

请查看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;
}

答案 4 :(得分:5)

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

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

因此,它将提高代码的可读性和含义,特别是在代码将与其他人共享的大型软件开发团队中。

答案 5 :(得分:4)

如果在本地范围内有另一个this.button1,则需要button1之类的内容。

答案 6 :(得分:4)

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

例如,当成员变量名称与方法参数相同时,

this.用于消除歧义。

除此之外,这是一个品味问题,但我相信大多数程序员都不会使用它,因为输入时间很长(但有点可读性,我会说)。

答案 7 :(得分:4)

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

public class MyClass{
    private string name;

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

答案 8 :(得分:3)

对于编译器来说是一样的。表单具有控件作为字段,添加this关键字只是让读者了解我们正在使用表单字段

答案 9 :(得分:3)

这是不必要的(如果没有它,代码将正常工作),但它确实使方法或字段所属的位置更加清晰。如果你在最挑剔的设置上使用StyleCop,微软推荐这种风格。

编辑:实际上,大部分时间都没有必要,但正如其他几个答案所提到的,有时需要解决冲突。

答案 10 :(得分:3)

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

当你在SomeMethod()之内时,说你想打电话给OtherMethod()。使用this可以防止您每次使用时都必须编写SomeNameSpace.SomeClass.OtherMethod()

由于您已经在SomeClass之内,this将在SomeClass内部工作时引用SomeMethod()。因此,引用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()
    }
  }
}

答案 11 :(得分:1)

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

public class User
{
    string firstname;
    string lastname;

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