通过什么样的论点
本文关键字:什么样 | 更新日期: 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()
其中window
是Window
的实例。
有关扩展方法的更多文档,请查看此处。
假设你打算添加一个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