我对这段代码感到好奇:
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)
这是很好的语法糖.
这就是扩展方法的定义方式。
这本质上意味着,即使此方法包含在封装静态类中,当使用指定的类型(在标记为扩展方法的参数中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)
| 归档时间: |
|
| 查看次数: |
6355 次 |
| 最近记录: |