扩展方法能够访问“this”对象吗?

3
假设我想给类B添加一个扩展方法。在我的扩展方法中,我能否使用“this”引用来获取调用该扩展方法的类B实例的引用?
2个回答

6

是和不是。简单查看文档,这一点非常清楚。

根据定义,扩展方法的第一个参数是指向调用/附加方法的对象的指针,它实际上是一个由this关键字引用但具有自己名称的变量:

http://msdn.microsoft.com/en-us/library/bb383977.aspx

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}

这使得有一个名为"str"的"this"对象存在,所以您不能使用"this"(因为它将指向定义扩展方法的类不存在的实例),但是您可以声明自己的替代变量,指向一个附加了扩展方法的对象。


1
不可以,你必须使用实际参数的名称。

除了参数而言,是的,应该使用“参数名称”。 - Jon Skeet
@Jon Skeet:还是只是parameter - BoltClock
@Jon:挑剔起来了:P,但是没错,“argument”不是正确的术语。我改正了。 - user541686

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接