为什么需要使用“这个”(一些啧啧)

时间:2014-05-15 07:24:28

标签: c#

只需遵循一些教程(http://www.techotopia.com/index.php/Hiding_and_Showing_Forms_in_C_Sharp) 其中说:

如上一节所述,为了从显示器和内存中删除表单,必须关闭而不是隐藏它。在Visual Studio中再次双击subForm中的按钮以查看Click事件过程。再一次,因为按钮处于我们关闭的形式,我们需要在调用Close()方法时使用它而不是subForm:

  private void button1_Click(object sender, EventArgs e)
  {
            this.Close();
  }

我仍然没有理由为什么在这里使用this.Close(),而不仅仅是Close()

(关于Hide()方法的说法与上面的一个部分类似)。

4 个答案:

答案 0 :(得分:10)

在这种情况下,this实际上可以省略。 this仅表示"类的当前实例"。有些情况需要this,例如当实例变量与局部变量同名时。在这种情况下,必须使用this来访问实例变量而不是本地变量。

示例:

public class Test
{
    private int i;

    public Test(int i)
    {
        this.i = i; // Sets the instance variable
        i = 1; // Sets the local variable
    }
}

编辑:Marc Gravell正确地提到了扩展方法,它只在实例上起作用。因此,要在类的当前实例上调用某个方法,您也必须使用this

答案 1 :(得分:4)

在大多数情况下,这不是必需的。由于它与任何局部变量都没有冲突(因为不是任何局部变量),唯一的时间需要是{{ 1}}是当前实例可用的扩展方法。但是,有些人更喜欢将其添加到"清晰度" (我不确定它是否会增加任何内容)。

作为次要注意事项:以下是 由于本地原因而不明确的示例:

Close()

最后,在某些情况下Action Close = delegate { Console.WriteLine("hello"); }; // or whatever this.Close(); // calls the instance method or extension method Close(); // invokes the local delegate 是可取的,因为this.Foo()base.Foo()也在同一方法中使用,并且希望将它们显而易见。例如,使用otherObject.Foo().Equals(...)方法。

答案 2 :(得分:1)

this用于当前实例字段/ properties / methods / constructors / events等。因此,只使用Close()会有所帮助。

但是,如果某个字段中可能有多个字段/对象,则可能不会调用/使用该对象。在这种情况下,您必须明确说明this

一个例子是

void someMethod(FooClass someClass) {
    this.someClass = someClass; //assigning the local someClass field to the current object's someClass field.
}

答案 3 :(得分:0)

根据我在教程中的理解,它不是关于this,而是关于明确当前窗口是否被关闭/隐藏。除此之外,this对于某些人而言是一种风格问题,使这个实例的含义更加清晰。这是可选的。除非您需要一种方法将当前实例传递给方法,例如,您需要this