为什么c#中的扩展方法必须以“this”为前缀?

时间:2015-05-13 08:22:43

标签: c# .net extension-methods

在C#中,在调用类的方法时隐式使用“this”引用。使用扩展方法时,这似乎不成立:

public static class TestExtensions
{
    public static void ExtensionMethod(this Test t)
    {
        // IMPLEMENTATION
    }
}

public class Test 
{
    public void A()
    {
        B(); // implicitly this.B();
    }

    public void B()
    {
        ExtensionMethod(); // doesn't work!
        this.ExtensionMethod(); // works!
    }
}

据我所知,扩展方法仅仅是“糖”,它将“this”引用传递给statis扩展方法。但是,为什么它还应该强制添加“this”关键字,如果它能找到要调用的方法呢?

1 个答案:

答案 0 :(得分:1)

因为您必须区分扩展方法和普通静态方法。这是说编译器它是一个扩展的关键,否则你应该像ExtensionMethods.Method(instance,arg,arg,...)一样调用它(顺便说一下)。