Для вызова метода как метода расширения требуется больше ссылок, чем для непосредственного вызова - PullRequest
7 голосов
/ 07 декабря 2011

У меня есть метод расширения, который я буду называть 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 .

My HelperAssembly содержит ссылку на OtherAssembly1 и OtherAssembly2 .

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

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

HelperClass.MyHelperMethod(some, other);

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

some.MyHelperMethod(other);

В ошибках указано, что CallerAssembly должна ссылаться на OtherAssembly1 и OtherAssembly2 .

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

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

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

1 Ответ

1 голос
/ 12 декабря 2011

Есть ли вероятность того, что CallerAssembly нацелен на профиль клиента .NET Framework, а HelperAssembly нацелен на "полный" .NET Framework?

Когда я это сделал, у меня возникли проблемы с методами расширения (и другими вещами).

...