只需遵循一些教程(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()
方法的说法与上面的一个部分类似)。
答案 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
。