特定のタイプの引数を受け入れる関数を定義した単純なプログラムを作成しています。今、取得した新しい要件には、以前の関数で既に記述した手順と同じ手順がありますが、今回は異なるタイプの2 つの異なるタイプの引数に対して、この同じ関数を直接呼び出すことはできません。したがって、私の質問は、そのような方法で動作するように関数をどのように変更する必要があるかです。それが可能であることを願っています。型引数Sum(int 1,int j)
に同じ関数を使用したいのですが、今のような関数があります。double
8 に答える
ジェネリックでシンプル
T Sum<T>(T i,T j) { ... }
ただし、できることi+j
も何もないので、状況次第です。
これをオーバーロードと呼びます。できることは、次の 2 つの関数を記述するだけです。
public double Sum(int 1, int j)
public double Sum(double 1, double j)
そして、プログラムは、渡された引数に基づいて適切なものを呼び出します。
パラメーターの型として double を使用してメソッドを定義し、後で整数値に対しても呼び出すことができます。
private double Sum(double a, double b)
{
return a+b;
}
後で次のように呼び出すことができます:
int a = 1;
int b = 2;
int Sum = (int) Sum(a,b);
double 型のパラメーターには整数を渡すことができるためです。ただし、メソッドに複雑な計算が含まれる場合は、異なる型の Sum メソッドの複数のオーバーロードを使用する方が適切です。
同じ量のパラメーターを使用して、型が異なる新しいメソッドを宣言します。
public Int32 Sum(Int32 i, Int32 j)
{
return i + j;
}
public Double Sum(Double i, Double j)
{
return i + j;
}
.NET には、さまざまな数値型を含む型はありません。したがって、同じメソッドの 2 つのオーバーロードが必要です。1 つはint
引数を受け取り、もう 1 つは引数を受け取りdouble
ます。
int a = 2, b = 3;
double c = 2.345, d = 3.45;
object inta = a, intb = b;
object doublec = c, doubled = d;
Console.WriteLine(Sum(inta, intb).ToString());
Console.WriteLine(Sum(doublec, doubled).ToString());
public object Sum(object a, object b)
{
object sum = null;
if (a.GetType().ToString() == "System.Int32" && b.GetType().ToString() == "System.Int32")
{
sum = Convert.ToInt32(a.ToString()) + Convert.ToInt32(b.ToString());
}
if (a.GetType().ToString() == "System.Double" && b.GetType().ToString() == "System.Double")
{
sum = Convert.ToDouble(a.ToString()) + Convert.ToDouble(b.ToString());
}
return sum;
}
int
したがって、パラメーターを取るメソッドがあります
public int Sum(int val1,int val2)
{
return val1 + val2;
}
次に、次のメソッドが必要ですdoubles
。
public double Sum(double val1,double val2)
{
return val1 + val2;
}
すべての「数値」型をサポートするジェネリッククラスが必要な場合は、こちらを参照してください。
http://www.codeproject.com/Articles/33617/Arithmetic-in-Generic-Classes-in-C
さまざまなデータ型に対してGENERIC METHODSを記述できます。このリンクを確認してください このリンク を詳しく見てください。複数のデータ型を処理できる関数を作成する方法を示します。