que programacion polimorfico metodos metodo matematicas llamar funciones extensión extension ejemplo clases c# extension-methods

c# - programacion - Métodos de extensión estáticos



que es un metodo de extension (5)

Posible duplicado:
¿Puedo agregar métodos de extensión a una clase estática existente?

¿Hay alguna manera de que pueda agregar un método de extensión estático a una clase?

específicamente quiero sobrecargar Boolean.Parse para permitir un argumento int.


específicamente quiero sobrecargar Boolean.Parse para permitir un argumento int.

¿Una extensión para int trabajo?

public static bool ToBoolean(this int source){ //do it //return it }

Entonces puedes llamarlo así:

int x = 1; bool y=x.ToBoolean();


En resumen, no, no puedes.

Respuesta larga, los métodos de extensión son solo azúcar sintáctico. ES DECIR:

si tiene un método de extensión en cadena, digamos:

public static string SomeStringExtension(this string s) { //whatever.. }

Cuando lo llamas:

myString.SomeStringExtension();

el compilador simplemente lo convierte en:

ExtensionClass.SomeStringExtension(myString);

Como puede ver, no hay forma de hacer eso para métodos estáticos.

Y otra cosa se me ocurrió: ¿cuál sería realmente el sentido de poder agregar métodos estáticos en las clases existentes? Puedes tener tu propia clase de ayuda que hace lo mismo, así que, ¿cuál es realmente el beneficio de poder hacer?

Bool.Parse(..)

vs.

Helper.ParseBool(..);

Realmente no trae mucho a la mesa ...



No, pero podrías tener algo como:

bool b; b = b.YourExtensionMethod();


Puede agregar un método de extensión a int

public static class IntExtensions { public static bool Parse(this int value) { if (value == 0) { return true; } else { return false; } } public static bool? Parse2(this int value) { if (value == 0) { return true; } if (value == 1) { return false; } return null; } }

usado así

bool bool1 = 0.Parse(); bool bool2 = 1.Parse(); bool? bool3 = 0.Parse2(); bool? bool4 = 1.Parse2(); bool? bool5 = 3.Parse2();