我读过开源的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