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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top