繁体   English   中英

C#中的“扩展方法”是什么意思?

[英]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编写的客户端代码,调用扩展方法和实际在类型中定义的方法之间没有明显区别。

关于扩展方法的C#文章

扩展方法是静态类中的静态方法,其第一个参数前面是关键字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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM