Подтвердить что ты не робот

Этот параметр-модификатор в С#?

Мне интересен этот фрагмент кода:

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 рядом с типом параметра? Я не могу найти никакой информации об этом нигде, даже в спецификации С#.

4b9b3361

Ответ 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);

Ответ 5

Это означает, что это метод расширения. MSDN

Ответ 6

Этот метод расширения для класса NetOutgoingMessage.

Смотрите здесь: текст ссылки