我对这个代码片段很好奇:
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#规范中也找不到。
发布于 2011-01-15 22:15:45
那是个extension method。
语法意味着您可以像调用NetOutgoingMessage类的成员一样调用该方法:
var msg = new NetOutgoingMessage();
msg.Write(somePoint);
这基本上是由编译器重写为:
var msg = new NetOutgoingMessage();
XNAExtensions.Write(msg, somePoint);
这只是一个很好的语法糖。
发布于 2011-01-15 22:15:59
这就是extension method的定义方式。
这实际上意味着,即使此方法包含在封装的静态类中,当使用指定的类型(在标记为this
的扩展方法参数中)时,这种方法将自动公开,从而:
var typeInstance = new TypeWithExtensionMethod();
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance);
是可能的,而不是:
var type = new TypeWithExtensionMethod();
ExtensionMethods.ExtensionMethod(typeInstance, anyOtherParametersRequired);
发布于 2011-01-15 22:15:47
它表明Write
是NetOutgoingMessage
类的extension method。
https://stackoverflow.com/questions/4700016
复制相似问题