繁体   English   中英

传递了什么样的论点?

[英]What kind of argument is passed?

我是C#的新手,我想知道在以下函数的Window部分类中传递什么样的参数:

public static void process(this Window window){...}

我知道类型是Window ,但是为什么它似乎具有参数-类型-参数语法? 实际传递的是什么作为参数。

谢谢

PS:我确实忘记了静态部分! 对不起大家!

假设您忘记了签名的静态部分,这是一种扩展方法。 装饰器模式的替代方法,使您可以向现有类添加功能。 this在签名指定,这是要扩展的类。 例如:

var w = new Window();
w.Process();

在这种方法中,您不会传递任何参数。 它是称为Window的类型的扩展方法。 (为了不被误解,我们可以将参数传递给扩展方法,但是此扩展方法没有任何参数。)因此可以如下使用:

window.process()

其中windowWindow的实例。

有关扩展方法的更多文档,请在此处查看

假设您打算添加static修饰符,则这是一个Extnsion方法,可以通过object-method语法进行校准。 尽管如此,编译器仍会在编译时将其转换为type-method(object)语法,它只是第一种方式作为语法糖。 这就是为什么有关无法识别的方法的错误包括no extension method accepting a first argument of type...子句no extension method accepting a first argument of type...

这是C#“扩展方法”功能。 它允许您使用代码扩展其他类。

因此,例如,您可以向“ int”类型添加新方法。

您发布的方法是扩展Window类,并向其添加“过程”方法(根据C#标准,它应命名为“过程”)。 它允许您在代码中使用,如下所示:

window.process();

您可以在此处详细了解如何使用它们,例如: http : //msdn.microsoft.com/zh-cn/library/bb383977.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM