C # metti in classe in un altro DLL
-
26-10-2019 - |
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?
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.