[英]Why the need to use “this” (some tut)
僅遵循一些教程( http://www.techotopia.com/index.php/Hiding_and_Showing_Forms_in_C_Sharp ),其中說:
如上一節所述,為了從顯示和從內存中刪除一個窗體,有必要關閉而不是隱藏它。 在Visual Studio中,再次雙擊子窗體中的按鈕以查看Click事件過程。 再一次,由於按鈕處於關閉狀態,因此在調用Close()方法時需要使用此按鈕而不是subForm:
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
我仍然不知道為什么在這里使用this.Close()
,而不是僅使用Close()
?
(關於Hide()
方法的說法與上面類似)。
在這種情況下, 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
。
在大多數情況下,這是沒有必要的。 由於它不與任何局部變量發生沖突(因為沒有任何局部變量),這將需要唯一的一次是,如果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(...)
或.CompareTo(...)
方法中。
this
用於當前實例字段/屬性/方法/構造函數/事件等。因此,僅使用Close()
會有所幫助。
但是,在一個字段中可能有多個字段/對象的情況下,它可能不會調用/使用一個對象。 在這種情況下,你必須明確說明this
一個例子是
void someMethod(FooClass someClass) {
this.someClass = someClass; //assigning the local someClass field to the current object's someClass field.
}
根據我在教程中了解的內容,它與this
無關,而是與明確顯示當前窗口正在關閉/隱藏有關。 除此之外,對於某些人來說this
是一個風格問題,以使該實例的含義更加清楚。 它是可選的。 例如,除非您需要一種將當前實例傳遞給方法的方法,否則需要this
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.