Tengo un método de extensión en lo que llamaré HelperAssembly que se parece a esto:Llamar a un método como un método de extensión requiere más referencia que llamar directamente
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);
}
}
tengo un montaje que llamaré CallerAssembly que tiene una referencia a HelperAssembly.
Mi HelperAssembly tiene una referencia tanto OtherAssembly1 y OtherAssembly2.
SomeClass y OtherClass se definen en ReferenceAssembly. HelperAssembly y CallerAssembly tiene una referencia a ReferenceAssembly.
Todo es grande cuando llamo a mi método de CallerAssembly así:
HelperClass.MyHelperMethod(some, other);
Sin embargo, consigo errores de compilación cuando lo llamo así (como un método de extensión):
some.MyHelperMethod(other);
Los errores dicen que CallerAssembly necesita referencia OtherAssembly1 y OtherAss embly2.
Estoy confundido. Pensé que la sintaxis del método de extensión era simplemente azúcar sintáctica, pero en realidad no cambió la forma en que las cosas se compilaron.
No quiero agregar las referencias que sugiere, así que no haré la llamada como un Método de extensión. Pero me gustaría entender cuál es la diferencia.
¿Por qué la invocación directa del método funciona correctamente pero no se puede generar una llamada como método de extensión?
Quizás falte algo en su descripción, porque no consigo ningún error si lo sigo. – muratgu
Lo mismo aquí, compila bien al llamar al método como Helper y cuando lo llamo como método de extensión. ¿Podría proporcionar información adicional? Es un error interesante – lontivero