una método metodos metodo llamar instanciar genérica funciones firma extensión estática ejemplos definirse debe consola clase c# extension-methods

método - metodos y funciones en c#



¿Cómo llamar al método de extensión que tiene el mismo nombre que un método existente? (5)

No puede llamar al método de extensión como un método de extensión normal. El método de instancia anula el método de extensión con la misma firma

EDITAR:

Puedes llamarlo como método estático.

ExtensionTest.MethodA(a);

Posible duplicado:
¿Hay alguna forma en C # para anular un método de clase con un método de extensión?

Tengo codigo como

public class TestA { public string ColA { get; set; } public string ColB { get; set; } public string ColC { get; set; } public void MethodA() { MessageBox.Show("Original A1."); } } static class ExtenstionTest { public static void MethodA(this TestA A1) { MessageBox.Show("Extended A1."); } }

Ahora si llamo MethodA como

TestA a = new TestA(); a.MethodA();

Siempre llamará método original. ¿Cómo puedo llamar al método de extensión.


No puedes llamarlo como un método de extensión . Básicamente es inútil en este punto, en términos de ser un método de extensión. (Personalmente me gustaría que esto fuera una advertencia, pero no importa.)

El compilador intenta todos los métodos de instancia posibles antes de intentar resolver los métodos de extensión. De la sección 7.6.5.2 de la especificación C # 4:

En una invocación de método de una de las formas [...] si el procesamiento normal de la invocación no encuentra métodos aplicables, se intenta procesar la construcción como una asociación de método de extensión.

y después:

Las reglas anteriores significan que los métodos de instancia tienen prioridad sobre los métodos de extensión

Puedes llamarlo como un método estático regular aunque:

// Fixed typo in name ExtensionTest.MethodA(a);


Puede llamar al método de extensión como cualquier otro método estático:

ExtenstionTest.MethodA(a);


como otros sugirieron que no puedes llamar a este método. La única forma de llamarlo es tal:

TestA a = new TestA(); ExtenstionTest.MethodA(a);


Métodos de Extensión - MSDN

Nunca se llamará un método de extensión con el mismo nombre y firma que un método de interfaz o clase. En el momento de la compilación, los métodos de extensión siempre tienen menor prioridad que los métodos de instancia definidos en el propio tipo.

Puede llamar al método de extensión como método estático regular de una clase.

ExtenstionTest.MethodA(a);

Desde el MSDN

En otras palabras, si un tipo tiene un método llamado Proceso (int i), y usted tiene un método de extensión con la misma firma, el compilador siempre se unirá al método de instancia. Cuando el compilador encuentra una invocación de método, primero busca una coincidencia en los métodos de instancia del tipo. Si no se encuentra una coincidencia, buscará cualquier método de extensión que esté definido para el tipo y se vinculará al primer método de extensión que encuentre. El siguiente ejemplo muestra cómo el compilador determina a qué método de extensión o método de instancia se debe enlazar.