![](/img/trans.png)
[英]What idiom (if any) do you prefer for naming the “this” parameter to extension methods in C#, and why?
[英]What do you mean by “extension methods” in C#?
任何人都可以解释这一点,(初学者的方法)。 谢谢..
扩展方法只是静态类中的静态方法,其行为类似于在其他类中定义的方法。
在类型之前的第一个参数中,关键字this
表示这是一个扩展方法。
例:
public static class Extensions
{
public static object ExtensionMethodForStrings( this string s, object otherParameter)
{
//....
return //whatever you want to return or not
}
}
这是System.String上的一个扩展方法,它接受两个参数: - string s:这是实例变量 - object otherParameter:你可以拥有任意多个参数,包括none
您可以通过两种方式调用此方法:
静态方式:
string s = "Your string";
object o = new object(); // or whatever you want
object result = Extensions.ExtensionMethodForStrings(s,o);
扩展方式方式
string s = "Your string";
object o = new object(); // or whatever you want
object result = s.ExtensionMethodForStrings(o);
在第二种情况下,它的工作方式就好像类型字符串有一个名为ExtensionMethodForStrings的实例方法。 实际上对于编译器来说是等价的。
扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但它们被称为扩展类型的实例方法。 对于用C#和Visual Basic编写的客户端代码,调用扩展方法和实际在类型中定义的方法之间没有明显区别。
扩展方法是静态类中的静态方法,其第一个参数前面是关键字this
。
C#编译器有一些语法糖,可以将x.Foo(bar)
的调用转换为SomeExtension.Foo(x, bar)
。 LINQ(Take,Skip,Where,Select等)广泛使用它,但如果您愿意,也可以编写自己的扩展方法。
这个问题包括许多有用的扩展方法的例子:
扩展方法是一种行为(某种程度上),就像它是类的成员一样,但它不是该类的成员。 它可以在该类的成员上调用,但是没有引用该类的内部。
扩展方法是静态方法,必须是静态类的成员。
public static class StringExtensions
{
public static string HtmlEncode(this string dataString)
{
return HttpServerUtility.HtmlEncode(dataString);
}
}
第一个参数类型之前的关键字“this”将此标识为扩展方法,并将其扩展为类。
它将以这种方式使用:
string foo = "bar";
string myOutput = foo.HtmlEncode();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.