在C#中静态方法的forms参数中使用“this”关键字

我遇到了几个C#代码的例子,如下所示:

public static int Foo(this MyClass arg) 

在这种情况下,我一直无法find关于this关键字的解释。 任何见解?

这是一个扩展方法 。 看到这里的解释 。

扩展方法允许开发人员将新方法添加到现有CLRtypes的公共契约中,而不必对其进行子类化或重新编译原始types。 扩展方法有助于将dynamic语言中stream行的“duck typing”支持的灵活性与强types语言的性能和编译时validation相结合。

扩展方法支持各种有用的场景,并有助于实现真正强大的LINQ查询框架。

这意味着你可以打电话

 MyClass myClass = new MyClass(); int i = myClass.Foo(); 

而不是

 MyClass myClass = new MyClass(); int i = Foo(myClass); 

这允许如下所述构buildstream畅的接口 。

Scott Gu引用的博客文章很好地解释了这一点。

对我来说,这个问题的答案是在这个职位的下面的声明:

注意上面的静态方法在stringtypes的第一个参数参数前面有一个“this”关键字。 这告诉编译器这个特定的扩展方法应该被添加到“string”types的对象中。 在IsValidEmailAddress()方法实现中,我可以访问方法被调用的实际string实例的所有公共属性/方法/事件,并根据它是否是有效的邮件返回true / false。

除了Preet Sangha的解释:
Intellisense以蓝色箭头显示扩展方法(例如在“Aggregate <>”之前):

在这里输入图像说明

你需要一个

 using the.namespace.of.the.static.class.with.the.extension.methods; 

如果扩展方法与使用它们的代码位于不同的名称空间中,则扩展方法将显示并可用。

他们是扩展方法 。 欢迎来到一个全新的stream利世界 。 🙂

我刚才自己也学过这个:this关键字定义了这个方法是inheritance它的类的一个扩展。 因此,对于你的例子,MyClass将有一个新的扩展方法称为Foo(它不接受任何参数,并返回一个int;它可以使用任何其他公共方法)。

“this”扩展参数列表中的下一个类

所以在下面的方法签名“this”扩展了“String”。 行被传递给该函数作为该方法的正常参数。 公共静态string[] SplitCsvLine(这个string行)

在上面的例子中,“this”类扩展了内置的“String”类。