Он просто отмечает его как метод расширения, это формат, который они решили использовать для определения метода как метода расширения, в отличие от простого статического метода (так его называют внутри себя в любом случае). Это только для компилятора (и intellisense), под обложками ваш код компилируется так же, как если бы вы просто вызывали статический метод напрямую.
Это определение метода:
public static int ToInt(string number) //non extension
Необходимо, чтобы можно было отличить от этого:
public static int ToInt(this string number) //extension
В противном случае вам придется IntelliSense, содержащий каждый статический метод статического класса в пространствах имен включены, очень нежелательны.
Я бы лично предпочел Атрибут. Что-то вроде [Extends (typeof (foo)], а затем имеет неявную переменную с именем value, аналогичную свойствам. Она была бы более выразительной и не требовала повторного использования существующего ключевого слова. Просто мое личное мнение. – John
Скотт Гензельман имеет хорошую статья, которая объясняет важность ключевого слова «this». http://www.hanselman.com/blog/HowDoExtensionMethodsWorkAndWhyWasANewCLRNotRequired.aspx – Zaffiro