假设我想给类B添加一个扩展方法。在我的扩展方法中,我能否使用“this”引用来获取调用该扩展方法的类B实例的引用?
是和不是。简单查看文档,这一点非常清楚。
根据定义,扩展方法的第一个参数是指向调用/附加方法的对象的指针,它实际上是一个由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"(因为它将指向定义扩展方法的类不存在的实例),但是您可以声明自己的替代变量,指向一个附加了扩展方法的对象。