Domanda

... è possibile?

Per esempio, posso aggiungere questo semplice funzione ...

public static double Deg2Rad(double degrees) {
    return Math.PI / 180 * degrees;
}

... alla classe Convert? Così (usando il default ... "usings") è possibile chiamare

double radians = Convert.Deg2Rad(123);

Può questo essere fatto? Se sì, come?

È stato utile?

Soluzione

No non si può, ma è possibile aggiungere un metodo di estensione per double e chiamarlo come

double x = 180.0;
double y = Math.Cos( x.Deg2Rad() );
double z = Math.Sin( 0.5.Pi() );

in una classe statica aggiungere il seguente metodo di estensione:

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;
    }
}

Altri suggerimenti

No, non è possibile. È possibile utilizzare le estensioni se non fosse Convert static, ma no.

Si potrebbe aggiungere un'estensione al double però, usando la parola chiave this:

public static double Deg2Rad(this double degrees) {
    return Math.PI / 180 * degrees;
}

e usarlo in questo modo:

double radians = (123D).Deg2Rad();

Si dovrà mettere il metodo in una classe static per farlo funzionare, però.

È possibile ordinare di ottenere quello che vuoi. C # ha "Metodi di estensione". Ciò consente di aggiungere metodi ad un'altra classe, anche se quella classe è in un altro assembly che non si ha il codice sorgente di. Tuttavia, non è possibile aggiungere funzioni statiche ad un'altra classe. È possibile aggiungere solo metodi di istanza.

Per ulteriori informazioni, vedere MSDN Estensioni Metodi .

No non si può, ma non si ha realmente bisogno di - si può solo dichiarare la propria classe statico invece, per esempio:

public static class MyConvert
{
    public static double Deg2Rad(double degrees) 
    {
        return Math.PI / 180 * degrees;
    }
}

Utilizzo:

double radians = MyConvert.Deg2Rad(123);

(Ovviamente MyConvert è un nome spazzatura, ma si ottiene l'idea).

L'unica differenza tra il sopra e avendo il metodo nella classe del sistema Convert è che se la sua sulla classe Convert Sembra un built-in funzione, ma si sta andando a lottare per convincere thats me in realtà una buona cosa ( mi piace sapere quando sto chiamando codice del framework vs codice mantenuta internamente).

A parte ciò che è stato detto qui, c'è anche un'altra opzione che è classi parziali (questo non si applica per la conversione).

Se la classe è dichiarata parziale, quindi è possibile aggiungere menthods tramite un'altra classe parziale, anche se è in un altro assembly (DLL).

Ma, ancora una volta, la classe deve essere originariamente dichiarati parziale che al lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top