首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#中的此参数修饰符?

C#中的此参数修饰符?
EN

Stack Overflow用户
提问于 2011-01-15 22:14:12
回答 6查看 7.4K关注 0票数 25

我对这个代码片段很好奇:

代码语言:javascript
复制
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#规范中也找不到。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-15 22:15:45

那是个extension method

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

代码语言:javascript
复制
var msg = new NetOutgoingMessage();
msg.Write(somePoint);

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

代码语言:javascript
复制
var msg = new NetOutgoingMessage();
XNAExtensions.Write(msg, somePoint);

这只是一个很好的语法糖。

票数 34
EN

Stack Overflow用户

发布于 2011-01-15 22:15:59

这就是extension method的定义方式。

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

代码语言:javascript
复制
var typeInstance = new TypeWithExtensionMethod();
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance);

是可能的,而不是:

代码语言:javascript
复制
var type = new TypeWithExtensionMethod();
ExtensionMethods.ExtensionMethod(typeInstance, anyOtherParametersRequired);
票数 4
EN

Stack Overflow用户

发布于 2011-01-15 22:15:47

它表明WriteNetOutgoingMessage类的extension method

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4700016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档