通过什么样的论点

本文关键字:什么样 | 更新日期: 2023-09-27 18:32:25

我对 C# 比较陌生,我想知道在以下函数的 Window 分部类中传递了什么样的参数:

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

我知道该类型是一个Window,但是为什么它似乎有参数-类型-参数语法?以及实际上作为参数传递的内容。

谢谢

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

通过什么样的论点

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

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

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

window.process()

其中windowWindow的实例。

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

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

这是一个

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

因此,例如,您可以将一个新方法添加到"int"类型。

您发布的方法正在扩展 Window 类,向其添加一个"进程"方法(根据 C# 标准,它应该像"进程"一样命名)。它允许您在代码中使用,如下所示:

window.process();

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