[英]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.