C#中的这个参数修饰符?

Iva*_*van 21 c#

我对这段代码感到好奇:

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);
    }
    // ...
};
Run Code Online (Sandbox Code Playgroud)

this关键字在参数类型旁边的含义是什么?我似乎无法在任何地方找到任何关于它的信息,即使在C#规范中也是如此.

Blo*_*ard 27

这是一种扩展方法.

语法意味着您可以像调用NetOutgoingMessage类一样调用该方法:

var msg = new NetOutgoingMessage();
msg.Write(somePoint);
Run Code Online (Sandbox Code Playgroud)

这基本上由编译器重写为:

var msg = new NetOutgoingMessage();
XNAExtensions.Write(msg, somePoint);
Run Code Online (Sandbox Code Playgroud)

这是很好的语法糖.


Gra*_*mas 5

这就是扩展方法的定义方式。

这本质上意味着,即使此方法包含在封装静态类中,当使用指定的类型(在标记为扩展方法的参数中this)时,也会自动公开这样的方法:

var typeInstance = new TypeWithExtensionMethod();
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance);
Run Code Online (Sandbox Code Playgroud)

是可能的,而不是:

var type = new TypeWithExtensionMethod();
ExtensionMethods.ExtensionMethod(typeInstance, anyOtherParametersRequired);
Run Code Online (Sandbox Code Playgroud)