C# Agregar a la clase en otra dll
-
26-10-2019 - |
Pregunta
...¿Es posible?
Por ejemplo, ¿puedo agregar esta función simple ...
public static double Deg2Rad(double degrees) {
return Math.PI / 180 * degrees;
}
...hacia Convert
¿clase? Entonces (usando el valor predeterminado ... "usos") puede llamar
double radians = Convert.Deg2Rad(123);
Se puede hacer esto? ¿Si es así, cómo?
Solución
No, no puedes, pero puedes agregar un método de extensión a double
y llámalo como
double x = 180.0;
double y = Math.Cos( x.Deg2Rad() );
double z = Math.Sin( 0.5.Pi() );
En una clase estática, agregue el siguiente método de extensión:
public static class ExtensionMethods
{
public static double Deg2Rad(this double angle)
{
return Math.PI*angle/180.0;
}
public static double Pi(this double x)
{
return Math.PI*x;
}
}
Otros consejos
No, no es posible. Podrías usar extensiones si Convert
no static
, pero no.
Podrías agregar una extensión a double
Sin embargo, usando el this
palabra clave:
public static double Deg2Rad(this double degrees) {
return Math.PI / 180 * degrees;
}
Y úsalo así:
double radians = (123D).Deg2Rad();
Tendrás que poner tu método en un static
clase para que funcione, sin embargo.
Puedes obtener lo que quieres. C# tiene "métodos de extensión". Esto le permite agregar métodos a otra clase, incluso si esa clase está en otro ensamblaje para el que no tiene el código fuente. Sin embargo, no puede agregar funciones estáticas a otra clase. Solo puede agregar métodos de instancia.
Para más información, ver Métodos de extensiones MSDN.
No, no puedes, pero realmente no lo necesitas, puedes declarar tu propia clase estática, por ejemplo:
public static class MyConvert
{
public static double Deg2Rad(double degrees)
{
return Math.PI / 180 * degrees;
}
}
Uso:
double radians = MyConvert.Deg2Rad(123);
(Obviamente MyConvert
es un nombre de basura, pero se entiende la idea).
La única diferencia entre lo anterior y tener el método en el sistema Convert
La clase es que si está en el Convert
Clase Parece una función incorporada, pero tendrás dificultades para convencerme de que eso es realmente algo bueno (me gusta saber cuándo llamo a Framework Code vs Code mantenido internamente).
Además de lo que se ha dicho aquí, también hay otra opción que es Clases parciales (Esto no se aplicará a convertir).
Si la clase se declara parcial, puede agregar menthods a través de otra clase parcial, incluso si está en otro ensamblaje (DLL).
Pero, nuevamente, la clase tiene que ser declarada originalmente parcial para que eso funcione.