簡體   English   中英

為什么需要使用“ this”(一些tut)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM