0

これらのメソッドを検討してください (int例を簡略化するためにパラメーター入力として使用されます。ただし、任意のデータ型にすることができ、同じであってはなりません)

        public int Multiply(int a, int b)
        {
            int c=1;
            return (a * b * c);
        }
        public int Multiply(int a, int b, int c)
        {
            return (a * b * c);
        }

これらのメソッドが長く書かれていると仮定すると、完全なメソッドをコピーしないようにするにはどうすればよいでしょうか?

4

5 に答える 5

4

オーバーロードされたメソッドは互いに呼び出すことができるため、機能を拡張して完全なメソッドをコピーすることを避けることができます。

public int Multiply(int a, int b)
{
        return Multiply(a,b,1);
}
public int Multiply(int a, int b, int c)
{
        return (a * b * c);
}
于 2013-03-17T05:46:14.427 に答える
3

C# では、オプションの引数をデフォルト値で使用できます。

public int Multiply(int a, int b, int c = 1)
{
     return (a * b * c);
}

次のように使用できます。

int a = Multiply(2, 3);    // 2 * 3 * 1 = 6
int b = Multiply(2, 3, 4); // 2 * 3 * 4 = 24
于 2013-03-17T05:52:54.307 に答える
2

1 つの呼び出しが、適切なパラメーターを使用した別のより一般的な呼び出しに縮小される場合は、これが推奨されるオプションです。(Inisheer と Jeremy Thompson の提案を参照してください)。

ただし、一般的に、これができない場合は、大規模な操作を意味のある小さな操作に分割することをお勧めします。このようにして、コードをあまり繰り返さずに、サブクラスで操作のさまざまなバリアントを実装できます。

于 2013-03-17T06:00:58.960 に答える
2

何かのようなもの :

private static int Multiply(params int[] nums)
{
    int result = 1;
    foreach (int num in nums)
    {
        result *= num;
    }
    return result;
}

上記のメソッドは、Linq を使用して記述できます。

private static int Multiply(params int[] nums)
{
    return nums.Aggregate(1, (current, num) => current*num);
}

例 :

    public static void Main()
    {
        int ans1 = Multiply(1, 2, 3, 4);         // 24
        int ans2 = Multiply(1, 2, 3, 4, 5);      // 120
        int ans3 = Multiply(1, 2, 3, 4, 5, 6);   // 720

    }
于 2013-03-17T05:50:17.183 に答える
1

varg 引数を指定したメソッドを使用してオーバーライドできます。すでに利用可能なメソッドは 2 と 3 の引数をカバーしているため、1,2,3 を使用して任意の数の入力を表すことができます。

オーバーロードされたメソッドを再利用するサンプル コードを次に示します。

コード

/**
 * @author Sudhakar Duraiswamy
 *
 */
public class Reuse {

    public static void main(String[] args) {
        Reuse r = new Reuse();
        int[] rr = {1,2,3};

        System.out.println(r.Multiply(rr));

        int[] rr1 = {1,2,3,3};
        System.out.println(r.Multiply(rr1));

        int[] rr2 = {1,2,3,3,2};
        System.out.println(r.Multiply(rr2));
    }

    public int  Multiply(int... arg){
        int result = 1;
        if(null != arg && arg.length >0){

            if(arg.length ==1){
                result =  arg[0];
            }else if(arg.length ==2){

                result =  Multiply(arg[0],arg[1]);
            }else if(arg.length >=3){               
                int remainingSize  = arg.length % 3;

                for(int i=0;i< arg.length-remainingSize ;i= i+3){                   
                    result = result * Multiply(arg[i], arg[i+1], arg[i+2]);                 
                }

                if(remainingSize == 2){             
                    result =result * Multiply(arg[arg.length-2], arg[arg.length-1]);
                }else if(remainingSize == 1){
                    result = result * arg[arg.length-1];
                }
            }
        }

        return result;
    }

    public int Multiply(int a, int b)
    {
        int c=1;
        return (a * b * c);
    }
    public int Multiply(int a, int b, int c)
    {
        return (a * b * c);
    }
}
于 2013-03-17T07:13:01.603 に答える