我对这段代码感到好奇:
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#规范中也是如此。
答案 0 :(得分:27)
语法意味着您可以像调用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)
它表示Write
是NetOutgoingMessage
类的extension method。
答案 4 :(得分:0)
这意味着它是一种扩展方法。 MSDN
答案 5 :(得分:0)
它是NetOutgoingMessage
类的扩展方法。
见这里:link text