繁体   English   中英

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

[英]Use of “this” keyword in formal parameters for static methods in C#

我遇到了如下几个C#代码实例:

public static int Foo(this MyClass arg)

在这种情况下,我无法找到this关键字的含义的解释。 有什么见解吗?

这是一种扩展方法 请参阅此处以获取解释

扩展方法使开发人员可以向现有CLR类型的公共合同添加新方法,而不必对其进行子类化或重新编译原始类型。 扩展方法有助于将当今在动态语言中流行的“鸭子键入”支持的灵活性与强类型语言的性能和编译时验证相结合。

扩展方法可实现各种有用的方案,并有助于实现真正强大的LINQ查询框架...。

这意味着你可以打电话

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

而不是

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

这样可以构建如下所述的流畅接口

Scott Gu引用的博客文章对此进行了很好解释。

对我来说,该问题的答案在该帖子的以下声明中:

请注意,上面的静态方法如何在字符串类型的第一个参数实参之前具有“ this”关键字。 这告诉编译器应将此特殊扩展方法添加到“字符串”类型的对象中。 然后,在IsValidEmailAddress()方法实现中,我可以访问调用该方法的实际字符串实例的所有公共属性/方法/事件,并根据是否为有效电子邮件返回true / false。

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

在此处输入图片说明

你需要一个

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

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

它们是扩展方法 欢迎来到一个全新的流利世界 :)

前几天我才刚刚学到这一点:this关键字定义了该方法是对该方法进行扩展的类的扩展。 因此,对于您的示例,MyClass将具有一个称为Foo的新扩展方法(该扩展方法不接受任何参数并返回int;可以与任何其他公共方法一样使用)。

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

因此在“ this”下面的方法签名中扩展了“ String”。 将行作为方法的常规参数传递给函数。 公共静态字符串[] SplitCsvLine(此字符串行)

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

暂无
暂无

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

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