2011-12-07 17 views
7

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?

+0

Quizás falte algo en su descripción, porque no consigo ningún error si lo sigo. – muratgu

+0

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

Respuesta

1

¿Hay alguna posibilidad de que CallerAssembly tenga como objetivo el perfil de .NET Framework Client y HelperAssembly tenga como objetivo el .NET Framework "completo"?

He tenido problemas con los métodos de extensión (y otras cosas) cuando hice esto.

Cuestiones relacionadas