如何理解以下代码? “这个”在通用函数原型中意味着什么?谢谢!
public static class MyExtensions
{
public static MyStream<T> MySingle<T>(this T source)
{
return new MyStream<T>(source);
}
}
答案 0 :(得分:16)
this
在此上下文中表示它是一种扩展方法,因此您可以使用“正常”方式:
MyExtensions.MySingle(someSource)
或者这种(有时更好的)方式:
someSource.MySingle()
仅当方法为static
且位于static
级别时才可以执行此操作。此外,它与方法的通用方面无关 - 您可以在没有泛型方面的情况下制作扩展方法,并且在参数前面仍然有this
。
如名称所示,扩展方法用于使用方法扩展已存在的类,如果您无权访问源,或者希望在广泛的类集上使用它。重要的是要注意,当您从类派生时,当您对类型进行扩展方法时,您无法访问私有和受保护的方法等。
另外,有一个深入的解释:
答案 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方法。