C# を別の DLL のクラスに追加する
-
26-10-2019 - |
質問
...出来ますか?
たとえば、こんな簡単な機能を追加できますか...
public static double Deg2Rad(double degrees) {
return Math.PI / 180 * degrees;
}
...へ Convert
クラス?したがって、(デフォルトの...「usings」を使用して)次のように呼び出すことができます
double radians = Convert.Deg2Rad(123);
これはできるでしょうか?もしそうなら、どのようにして?
解決
いいえ、できませんが、拡張メソッドを追加することはできます。 double
そしてそれを次のように呼びます
double x = 180.0;
double y = Math.Cos( x.Deg2Rad() );
double z = Math.Sin( 0.5.Pi() );
静的クラスに次の拡張メソッドを追加します。
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;
}
}
他のヒント
いいえ、不可能です。拡張機能を使用できます Convert
そうではありませんでした static
, 、しかしいいえ。
に拡張機能を追加できます double
ただし、使用してください this
キーワード:
public static double Deg2Rad(this double degrees) {
return Math.PI / 180 * degrees;
}
そして、そうするようにそれを使用してください:
double radians = (123D).Deg2Rad();
メソッドをaに配置する必要があります static
ただし、機能するクラス。
あなたが望むものを手に入れることができます。 C#には「拡張メソッド」があります。これにより、そのクラスがソースコードを持っていない別のアセンブリにある場合でも、別のクラスにメソッドを追加できます。ただし、静的関数を別のクラスに追加することはできません。インスタンスメソッドのみを追加できます。
詳細については、参照してください MSDN拡張メソッド.
いいえ、できませんが、本当に必要はありません - 代わりに自分の静的クラスを宣言することができます。
public static class MyConvert
{
public static double Deg2Rad(double degrees)
{
return Math.PI / 180 * degrees;
}
}
使用法:
double radians = MyConvert.Deg2Rad(123);
(明らかに MyConvert
ゴミの名前ですが、アイデアが得られます)。
上記とシステムにメソッドがあることの唯一の違い Convert
クラスは、その場合です Convert
クラスそれは組み込みの関数のように見えますが、あなたは私を説得するのに苦労するでしょう、それは実際に良いことです(私はフレームワークコードとコードを内部で維持するときを知りたいです)。
ここで言われたこととは別に、別の選択肢もあります。 部分クラス (これは変換には適用されません)。
クラスが部分的に宣言されている場合、別のアセンブリ(DLL)にある場合でも、別の部分クラスを介してMentHodsを追加できます。
しかし、繰り返しますが、クラスはもともと機能するために部分的であると宣言されなければなりません。