我讀過開源的C#代碼,並有很多奇怪的語法(對我來說)。用於C#語言的'this'是什麼?
他們申報方法的參數與這關鍵字如下:
這個對象@object
是什麼意思?
如果我刪除「這個」關鍵詞哪裏是數據類型之前,然後將它的工作方式不同?
我讀過開源的C#代碼,並有很多奇怪的語法(對我來說)。用於C#語言的'this'是什麼?
他們申報方法的參數與這關鍵字如下:
這個對象@object
是什麼意思?
如果我刪除「這個」關鍵詞哪裏是數據類型之前,然後將它的工作方式不同?
聽起來像是Extension Method。
的@
符號允許變量名是相同的C#關鍵字 - 我傾向於避免他們像瘟疫個人。
如果刪除this
關鍵字,它將不再是一個擴展方法,只是一個靜態方法。根據調用代碼的語法,它可能不再編譯,例如:
public static class IntegerMethods
{
public static int Add(this int i, int value)
{
return i + value;
}
}
int i = 0;
// This is an "extension method" call, and will only compile against extension methods.
i = i.Add(2);
// This is a standard static method call.
i = IntegerMethods.Add(i, 2);
編譯器會簡單地把所有「擴展方法調用」爲標準的靜態方法調用,在任何速度,但擴展方法調用將仍然只按照this type name
語法針對有效的擴展方法工作。
一些準則
這些都是我自己的,但我覺得他們是有用的。
System.Collections
或者其他非常有用的東西。不太有用但其他「普通」的東西往往會在Extensions.<namespace of extended type>
之下,因此通過慣例至少可以達到一致。MyFabulousExtensionMethod
出現在object
整個應用程序。如果您需要向,無論是限制範圍(命名空間)是非常具體,或旁路擴展方法和直接使用一個靜態類 - 這些不會污染在IntelliSense類型的元數據。null
(因爲他們是如何編譯成靜態方法調用),所以要小心,不要認爲「這種」不爲空(從呼叫一側這看起來像一個成功的方法調用一個空目標)。這些都是可選的,並非詳盡無遺,但我發現它們通常屬於「良好」建議的旗幟。因人而異。
我使用它們的唯一時間是擴展方法,以調用'this'參數'this'。雖然我得出的結論是「太可愛了」。 – 2013-05-10 12:34:43
@MthetheWWatson,我只是調用'this'參數'self'。作品。 – 2013-05-10 12:36:42
'meh'也可以作爲「這個」的名字;-) – 2013-05-10 12:37:08
「此類型名稱」語法用於擴展方法。
例如,如果我想一個UnCamelCase
方法添加到字符串(這樣我就可以做"HelloWorld".UnCamelCase()
產生「你好World` - 我這樣寫:
public static string UnCamelCase(this string text)
{
/*match any instances of a lower case character followed by an upper case
* one, and replace them with the same characters with a space between them*/
return Regex.Replace(text, "([a-z])([A-Z])", "$1 $2");
}
this string text
指的特定實例字符串,你正在使用和文本是它的標識。
的@語法允許中通常會保留的變量名。
C#有非常漂亮的語法,其實,如果你把它比作C++ 。 – 2013-05-10 12:33:43