通过什么样的论点?

时间:2014-11-28 14:45:19

标签: c# wpf function

我对C#比较新,我想知道在以下函数的Window partial class中传递了什么类型的参数:

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

我知道类型是Window,但为什么它似乎有参数 - 类型 - 参数语法?实际上作为一个论点传递了什么。

由于

PS:我确实忘记了静态部分!对不起伙计们!

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

在这种方法中,你不会传递任何参数。它是名为Window的类型的扩展方法。 (为了不被误解,我们可以将参数传递给扩展方法,但是这个扩展方法没有任何参数。)。所以它可以像下面这样使用:

window.process()

其中windowWindow的实例。

有关扩展方法的进一步文档,请查看here

答案 2 :(得分:1)

假设您要添加static修饰符,这是一个Extnsion方法,可以通过对象 - 方法语法进行修改。尽管如此,编译器会在编译时将其转换为类型 - 方法(对象)语法,它只是将第一种方式安排为语法糖。这就是有关无法识别的方法的错误包含no extension method accepting a first argument of type...子句的原因。

答案 3 :(得分:1)

这是一种C#"扩展方法"特征。它允许您使用代码扩展其他类。

例如,您可以向" int"添加新方法。类型。

您发布的方法是扩展Window类,添加一个"进程"它的方法(它应该命名为" Process",根据C#标准)。它允许您在代码中使用,如:

window.process();

你可以在这里阅读更多如何使用它们,例如:http://msdn.microsoft.com/en-us/library/bb383977.aspx

相关问题