this
en este contexto significa que es un método de extensión por lo que puede usarlo de la manera "normal":
MyExtensions.MySingle(someSource)
o de esta manera (a veces mejor):
someSource.MySingle()
Esto solo es posible cuando el método es static
y está en una clase static
. Además, no tiene nada que ver con el aspecto genérico del método: puede hacer métodos de extensión sin aspectos genéricos y todavía tiene el this
frente al parámetro.
Los métodos de extensión, como su nombre lo sugiere, se usan para extender clases ya existentes con métodos si no tiene acceso a la fuente o si desea que se use en un amplio conjunto de clases. Es importante tener en cuenta que no tiene acceso a métodos privados y protegidos, etc., como cuando deriva de la clase, cuando crea un método de extensión en un tipo.
También, para una explicación en profundidad:
Extension Methods (C# Programming Guide)
Buen punto acerca de la palabra clave 'this' que no está relacionada con los genéricos. – Oded