У меня есть метод расширения, который я буду называть 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 .
Я в замешательстве. Я думал, что синтаксис метода расширения был просто синтаксическим сахаром, но на самом деле не изменил способ компиляции.
Я не хочу добавлять ссылки, которые он предлагает, поэтому я не буду делать вызов в качестве метода расширения. Но я хотел бы понять, в чем разница.
Почему вызов метода напрямую строится нормально, но при вызове его как метода расширения не удается построить?