MySingle<T>
определяется как метод расширения (MSDN) .
Это означает, что при использовании вы можете назвать это так:
MyStream<string> stringStream = "a string".MySingle();
Это идентично тому, чтобы называть это «стандартным» способом:
MyExtensions.MySingle("a string");
Когда вы вызываете его первым способом (как метод расширения), элемент, для которого он вызывается, передается в качестве первого параметра. Поэтому тип первого параметра определяет тип, для которого может быть вызван метод расширения, но, поскольку у вас есть открытый универсальный тип, он может вызываться для любого объекта.
Чтобы определить метод расширения, содержащий класс и сам метод должны быть объявлены static
.
Методы расширения были добавлены в C # 3.0 и VB 9.0.