C# 什么是';这';在C语言中用于?
我读过开源c#code,有很多奇怪的语法(对我来说) 它们使用this关键字声明方法参数,如下所示: 此对象@object 这是什么意思 如果我删除数据类型前面的'this'关键字,那么它的工作方式会有所不同吗?听起来像是一个错误C# 什么是';这';在C语言中用于?,c#,.net,syntax,this,C#,.net,Syntax,This,我读过开源c#code,有很多奇怪的语法(对我来说) 它们使用this关键字声明方法参数,如下所示: 此对象@object 这是什么意思 如果我删除数据类型前面的'this'关键字,那么它的工作方式会有所不同吗?听起来像是一个错误 @符号允许变量名与C#关键字相同-我个人倾向于避免使用它们 如果删除this关键字,它将不再是一个扩展方法,而只是一个静态方法。根据调用代码语法,它可能不再编译,例如: public static class IntegerMethods { public s
@
符号允许变量名与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
语法对有效的扩展方法起作用
一些指导原则
这些是我自己的,但我发现它们很有用
- 扩展方法的可发现性可能是一个问题,所以请注意您选择在其中包含它们的名称空间。我们在.NET名称空间下有非常有用的东西,比如
或其他任何东西。不太有用但在其他方面“普通”的东西倾向于使用System.Collections
这样,可发现性至少通过约定是一致的扩展。
- 尽量不要在广泛的范围内扩展经常使用的类型,你不希望
出现在整个应用程序的MyFabulousExtensionMethod
上。如果需要,可以将作用域(名称空间)限制为非常特定的,或者绕过扩展方法直接使用静态类——这不会污染IntelliSense中的类型元数据object
- 在扩展方法中,“this”可以是
(由于它们是如何编译成静态方法调用的),所以要小心,不要假设“this”不是null(从调用方来看,这看起来像是对null目标的成功方法调用)null
这些都是可选的,并非详尽无遗,但我发现它们通常属于“好”建议的范畴。YMMV.此类型名称语法用于扩展方法 例如,如果我想在字符串中添加一个
UnCamelCase
方法(这样我就可以执行“HelloWorld”.UnCamelCase()
来生成“Hello 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");
}
此字符串文本
表示您正在使用的字符串的特定实例,文本是该字符串的标识符
@语法允许变量通常是保留的。< /P> C >语法非常好,实际上,如果你把它与C++比较。我只用了扩展方法,调用<代码>这个< /Cord>参数>代码> @ <代码>。虽然我得出的结论是“太可爱了”。“@MatthewWatson,我只是调用
这个
参数self
。可以工作。