C# in eine andere DLL zur Klasse hinzufügen
-
26-10-2019 - |
Frage
...ist es möglich?
Kann ich beispielsweise diese einfache Funktion hinzufügen ...
public static double Deg2Rad(double degrees) {
return Math.PI / 180 * degrees;
}
...zum Convert
Klasse? Also (mit der Standardeinstellung ... "using") können Sie anrufen
double radians = Convert.Deg2Rad(123);
Kann das getan werden? Wenn das so ist, wie?
Lösung
Nein, das können Sie nicht, aber Sie können eine Erweiterungsmethode hinzufügen double
und nenn es wie wie
double x = 180.0;
double y = Math.Cos( x.Deg2Rad() );
double z = Math.Sin( 0.5.Pi() );
Fügen Sie in einer statischen Klasse die folgende Erweiterungsmethode hinzu:
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;
}
}
Andere Tipps
Nein, es ist nicht möglich. Sie könnten Erweiterungen verwenden, wenn Convert
war nicht static
, aber nein.
Sie könnten eine Erweiterung hinzufügen double
Verwenden Sie jedoch die this
Stichwort:
public static double Deg2Rad(this double degrees) {
return Math.PI / 180 * degrees;
}
Und benutze es so:
double radians = (123D).Deg2Rad();
Sie müssen Ihre Methode in a einsetzen static
Klasse, damit es funktioniert.
Sie können irgendwie bekommen, was Sie wollen. C# hat "Erweiterungsmethoden". Auf diese Weise können Sie Methoden zu einer anderen Klasse hinzufügen, auch wenn sich diese Klasse in einer anderen Versammlung befindet, für die Sie den Quellcode nicht haben. Sie können jedoch keine statische Funktionen zu einer anderen Klasse hinzufügen. Sie können nur Instanzmethoden hinzufügen.
Weitere Informationen finden Sie unter MSDN -Erweiterungsmethoden.
Nein, das können Sie nicht, aber Sie müssen es nicht wirklich - Sie können stattdessen nur Ihre eigene statische Klasse deklarieren, zum Beispiel:
public static class MyConvert
{
public static double Deg2Rad(double degrees)
{
return Math.PI / 180 * degrees;
}
}
Verwendungszweck:
double radians = MyConvert.Deg2Rad(123);
(Offensichtlich MyConvert
ist ein Müllname, aber Sie haben die Idee).
Der einzige Unterschied zwischen dem obigen und der Methode im System hat die Methode Convert
Klasse ist das, wenn es auf dem ist Convert
Klasse Es sieht nach einer integrierten Funktion aus, aber Sie werden Schwierigkeiten haben, mich zu überzeugen, dass das eigentlich eine gute Sache ist (ich möchte wissen, wann ich Framework-Code aufrufe, und Code, der intern gepflegt wurde).
Abgesehen von dem, was hier gesagt wurde, gibt es auch eine andere Option, die ist Teilklassen (Dies gilt nicht für Konvertiten).
Wenn die Klasse teilweise deklariert ist, können Sie über eine andere Teilklasse Menthods hinzufügen, auch wenn sie sich in einer anderen Versammlung befindet (DLL).
Aber auch hier muss die Klasse ursprünglich teilweise erklärt werden, damit dies funktioniert.