Этот параметр-модификатор в С#?
Мне интересен этот фрагмент кода:
public static class XNAExtensions
{
/// <summary>
/// Write a Point
/// </summary>
public static void Write(this NetOutgoingMessage message, Point value)
{
message.Write(value.X);
message.Write(value.Y);
}
// ...
};
Что означает ключевое слово this
рядом с типом параметра? Я не могу найти никакой информации об этом нигде, даже в спецификации С#.
Ответы
Ответ 1
Это метод расширения.
Синтаксис означает, что вы можете вызвать метод, как если бы он был членом класса NetOutgoingMessage:
var msg = new NetOutgoingMessage();
msg.Write(somePoint);
Это в основном переписывается компилятором на:
var msg = new NetOutgoingMessage();
XNAExtensions.Write(msg, somePoint);
Это просто хороший синтаксический сахар.
Ответ 2
Что означает это ключевое слово рядом с типом параметра?
Это означает, что метод является методом расширения.
Я не могу найти никакой информации об этом нигде, даже в спецификации С#.
Запрошенная вами информация находится в разделе 10.6.9 спецификации С# 4.
Ответ 3
Таким образом определяется метод расширения.
Это в основном означает, что, хотя этот метод содержится в инкапсулирующем статическом классе, при использовании указанного типа (в параметрах метода расширения, помеченных this
), такой метод будет автоматически открыт таким образом, что:
var typeInstance = new TypeWithExtensionMethod();
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance);
Возможно, в отличие от:
var type = new TypeWithExtensionMethod();
ExtensionMethods.ExtensionMethod(typeInstance, anyOtherParametersRequired);
Ответ 4
Это означает, что Write
является методом расширения классу NetOutgoingMessage
.
Ответ 5
Это означает, что это метод расширения. MSDN
Ответ 6
Этот метод расширения для класса NetOutgoingMessage
.
Смотрите здесь: текст ссылки