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