C#泛型函数问题

时间:2010-08-25 20:47:47

标签: c# extension-methods

如何理解以下代码? “这个”在通用函数原型中意味着什么?谢谢!

public static class MyExtensions
{
    public static MyStream<T> MySingle<T>(this T source)
    {
        return new MyStream<T>(source);
    }
}

6 个答案:

答案 0 :(得分:16)

this在此上下文中表示它是一种扩展方法,因此您可以使用“正常”方式:

MyExtensions.MySingle(someSource)

或者这种(有时更好的)方式:

someSource.MySingle()

仅当方法为static且位于static级别时才可以执行此操作。此外,它与方法的通用方面无关 - 您可以在没有泛型方面的情况下制作扩展方法,并且在参数前面仍然有this

如名称所示,扩展方法用于使用方法扩展已存在的类,如果您无权访问源,或者希望在广泛的类集上使用它。重要的是要注意,当您从类派生时,当您对类型进行扩展方法时,您无法访问私有和受保护的方法等。

另外,有一个深入的解释:

Extension Methods (C# Programming Guide)

答案 1 :(得分:7)

它是extension method,它成为T类型所有对象的有效方法。

它与泛型无关。

答案 2 :(得分:2)

MySingle<T>被定义为extension method (MSDN)

这意味着在使用中您可以这样称呼它:

MyStream<string> stringStream = "a string".MySingle();

这与以“标准”方式调用它相同:

MyExtensions.MySingle("a string");

当您以第一种方式(作为扩展方法)调用它时,调用它的项目将作为第一个参数传递。因此,第一个参数的类型定义了可以调用扩展方法的类型,但由于您有一个开放的泛型类型,因此可以在任何对象上调用它。

要定义扩展方法,必须将包含类和方法本身声明为static

在C#3.0和VB 9.0中添加了扩展方法。

答案 3 :(得分:1)

这是一种扩展方法,this是应用该方法的实例。

答案 4 :(得分:1)

是的,它是一种扩展方法,但据我所知,他也在询问在方法签名中使用带有“this”关键字的T(泛型类型定义)是什么意思。

这意味着extention方法对于项目中每个类和结构类型的所有对象都是有效的方法。

答案 5 :(得分:0)

这表明它是一种扩展方法。被扩展的类型是'T'。 'T'的所有实例都有MySingle方法。