Вызов метода как метода расширения требует больше ссылок, чем вызов метода напрямую

У меня есть метод расширения в том, что я назову HelperAssembly, который выглядит примерно так:

public static class HelperClass
{
    public static void MyHelperMethod(this SomeClass some, OtherClass other)
    {
        // This object is defined in OtherAssembly1
        ObjectFromOtherAssembly1 object1 = new ObjectFromOtherAssembly1(some);

        // This object is defined in OtherAssembly2
        ObjectFromOtherAssembly2 object2 = new ObjectFromOtherAssembly2(other);

        DoStuffWith(object1, object2);    
    }
}

У меня есть сборка, которую я назову CallerAssembly, которая имеет ссылку на HelperAssembly.

Моя HelperAssembly имеет ссылку на OtherAssembly1 и OtherAssembly2.

SomeClass и OtherClass определены в ReferenceAssembly. HelperAssembly и CallerAssembly имеют ссылку на ReferenceAssembly.

Все отлично, когда я вызываю свой метод из CallerAssembly следующим образом:

HelperClass.MyHelperMethod(some, other);

Однако я получаю ошибки сборки, когда я вызываю его следующим образом (как метод расширения):

some.MyHelperMethod(other);

Ошибки говорят, что CallerAssembly должен ссылаться на OtherAssembly1 и OtherAssembly2.

Я в замешательстве. Я думал, что синтаксис методов расширения - это просто синтаксический сахар, но не меняет способ компиляции.

Я не хочу добавлять ссылки, которые он предлагает, поэтому я не буду делать вызов как метод расширения. Но я хотел бы понять, в чем разница.

Почему вызов метода напрямую работает нормально, а вызов его как Extension Method не работает?

7
задан Vaccano 7 December 2011 в 18:09
поделиться