我遇到过几个像下面这样的c#代码实例:

public static int Foo(this MyClass arg)

我还没有找到这个关键字在这种情况下意味着什么解释。见解吗?


当前回答

除了Preet Sangha的解释之外: 智能感知以蓝色箭头显示扩展方法(例如在"Aggregate<>"前面):

你需要一个

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

如果扩展方法与使用它们的代码在不同的名称空间中,则扩展方法将出现并可用。

其他回答

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

对我来说,这个问题的答案就在那篇文章的以下声明中:

注意上面的静态方法如何具有 “this”关键字放在第一个前面 string类型的参数参数。 这告诉编译器 具体的推广方法应该是 添加到类型为"string"的对象中。 在IsValidEmailAddress()中 方法实现,我就可以 访问所有的公众 属性的属性/方法/事件 该方法的实际字符串实例 正在被召唤,并返回 真/假取决于是否是 是否有效的电子邮件。

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

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

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

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

除了Preet Sangha的解释之外: 智能感知以蓝色箭头显示扩展方法(例如在"Aggregate<>"前面):

你需要一个

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

如果扩展方法与使用它们的代码在不同的名称空间中,则扩展方法将出现并可用。

前几天我自己也学过这个:this关键字定义了该方法是继承它的类的扩展。对于你的例子,MyClass将有一个新的扩展方法Foo(它不接受任何参数并返回int;它可以像任何其他公共方法一样使用)。