2010-08-25 70 views
6

如何理解下面的代碼?泛型函數原型中的「this」意味着什麼?謝謝!C#通用函數問題

public static class MyExtensions 
{ 
    public static MyStream<T> MySingle<T>(this T source) 
    { 
     return new MyStream<T>(source); 
    } 
} 

回答

7

它是一種extension method,變成T類型

它無關,與仿製藥的所有對象的有效方法。

+3

有關'this'關鍵字與泛型無關的好處。 – Oded 2010-08-25 20:52:47

16

this在此上下文中意味着它是一個擴展方法,從而既可以使用它的 「正常」 方式:

MyExtensions.MySingle(someSource)

或該(有時更好)的方法:

someSource.MySingle()

這隻有在方法爲static且處於static類中時纔可能。此外,它與該方法的通用方面無關 - 您可以在沒有泛型方面進行擴展的方法,並且您仍然在參數前面有this

如名稱所示,擴展方法用於在方法中擴展已存在的類,前提是您無法訪問源代碼或者希望通過廣泛的類來使用擴展方法。重要的是要注意,你不能訪問私有和受保護的方法等,就像你從類中派生出來的那樣,當你在一個類型上進行擴展的時候。

另外,對於進行了深入的解釋:

Extension Methods (C# Programming Guide)

1

這是一個擴展方法,this是實例,該方法被應用到。

0

這表明它是一種擴展方法。被擴展的類型是'T'。 'T'的所有實例都有方法MySingle。

2

MySingle<T>定義爲extension method (MSDN)

這意味着在使用,你可以這樣調用:

MyStream<string> stringStream = "a string".MySingle(); 

這是相同的稱其爲「標準」的方式:

MyExtensions.MySingle("a string"); 

當你調用它的第一種方式(作爲擴展方法),其被調用的項目作爲第一個參數傳遞。因此,第一個參數的類型定義了可以調用擴展方法的類型,但由於您有一個開放的泛型類型,因此可以在任何對象上調用它。

要定義擴展方法,必須聲明包含類和方法本身static

C#3.0和VB 9.0中增加了擴展方法。

1

是的,這是一個擴展方法,但據我瞭解他也問在方法簽名中使用T(泛型類型定義)和「this」關鍵字是什麼意思。

這意味着擴展方法對於項目中每個類和結構類型的所有對象都是有效的方法。