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

时间:2010-08-14 00:43:54

标签: c#

任何人都可以解释这个,(初学者的方法)。感谢..

4 个答案:

答案 0 :(得分:6)

扩展方法只是静态类中的静态方法,其行为与在其他类中定义的方式相同 在类型前的第一个参数中,关键字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:你可以拥有任意多个,包括无

您可以通过两种方式调用此方法:

静态方式:

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的实例方法。实际上对于编译器来说是等价的。

答案 1 :(得分:2)

  

扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但它们被称为扩展类型的实例方法。对于用C#和Visual Basic编写的客户端代码,调用扩展方法和实际在类型中定义的方法之间没有明显区别。

The C# article on Extension Methods

答案 2 :(得分:1)

扩展方法是静态类中的静态方法,其第一个参数前面有关键字this

C#编译器有一些语法糖,可以将x.Foo(bar)的调用转换为SomeExtension.Foo(x, bar)。 LINQ(Take,Skip,Where,Select等)广泛使用它,但如果您愿意,也可以编写自己的扩展方法。

这个问题包括许多有用的扩展方法的例子:

答案 3 :(得分:0)

扩展方法是一种行为(有点),就像它是类的成员一样,但它不是该类的成员。它可以在该类的成员上调用,但没有引用该类的内部。

扩展方法是静态方法,必须是静态类的成员。

public static class StringExtensions
{
    public static string HtmlEncode(this string dataString)
    {
        return HttpServerUtility.HtmlEncode(dataString);
    }
}

第一个参数类型之前的关键字“this”将此标识为扩展方法,并将其扩展为类。

它将以这种方式使用:

string foo = "bar";
string myOutput = foo.HtmlEncode();
相关问题