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

时间:2011-01-15 14:14:12

标签: 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);
    }
    // ...
};

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

6 个答案:

答案 0 :(得分:27)

那是extension method

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

var msg = new NetOutgoingMessage();
msg.Write(somePoint);

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

var msg = new NetOutgoingMessage();
XNAExtensions.Write(msg, somePoint);

这是很好的语法糖。

答案 1 :(得分:3)

这就是定义extension method的方式。

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

var typeInstance = new TypeWithExtensionMethod();
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance);

是可能的,而不是:

var type = new TypeWithExtensionMethod();
ExtensionMethods.ExtensionMethod(typeInstance, anyOtherParametersRequired);

答案 2 :(得分:3)

  

此关键字在参数类型旁边的含义是什么?

这意味着该方法是一种扩展方法。

  

我似乎无法在任何地方找到任何相关信息,即使是在C#规范中也是如此。

您寻求的信息在C#4规范的第10.6.9节中。

答案 3 :(得分:0)

它表示WriteNetOutgoingMessage类的extension method

答案 4 :(得分:0)

这意味着它是一种扩展方法。 MSDN

答案 5 :(得分:0)

它是NetOutgoingMessage类的扩展方法。

见这里:link text