0

間違った用語を検索しただけかどうかはわかりませんが、C# やその他のプログラミング言語で関数のオーバーロードを自動化する可能性があるかどうかを知りたいです。

私が持っているもの:

class A
{
    public void plus(int a1, int a2, int a3, int a4 ... int an)
    {
        ...
    }
    public void plus(int a2, int a3, int a4 ... int a20)
    {
        set default value for int a1
        ...
    }
    public void plus(int a3, int a4 ... int a20)
    {
        set default value for int a1
        set default value for int a2
        ...
    }
  ... and so on
}

私が欲しいのは、与えられたパラメーターの量を自動的に検出し、欠落している値をデフォルト値に置き換えるだけの関数です... n 個のパラメーターに対して n 個の関数を入力する必要はありません。

私の頭に浮かぶ唯一の可能性は、次のように、デフォルト値を使用する必要がある場所に null 値を与えることです。

class A
{
    public void plus(int a1, int a2, int a3, int a4 ... int an)
    {
        if(a1 == null)
            a1 = 1;
        if(a2 == null)
            a2 = 2;
         ...
    }
}

しかし、それはこれらの関数用語を使用できるという私の要件をサポートしません:

plus(1,2,3);
plus(1,2,3,4);
plus(1,2);
plus(1,2,3,4,5,6);

PS: 私の実際の問題 (投稿が許可されているかどうかはわかりません) では、それは単なるプラス操作ではありません。ツールを開始するためのパラメーターを作成します。

public string buildParameters(int a, int b, string c, double d (heheheh), Class C, Object D, etc...) {...} 

いいえ、これを解決する別のアイデアがありました:

class Builder
{
    public string buildParameters(int p1, int p2, string p3, double p4, char p5)
    {
        // Build String
        // build build
        // End
        return "blabla";
    }
    public string buildParameters(int p1, int p2, string p3, double p4)
    {
        return buildParameters(p1, p2, p3, p4, 'c');
    }
    public string buildParameters(int p1, int p2, string p3)
    {
        return buildParameters(p1, p2, p3, 0.00, 'c');
    }
    public string buildParameters(int p1, string p3)
    {
        return buildParameters(p1, 2, p3, 0.00, 'c');
    }
}

どのパラメーターが指定されているかどうかに応じて...最初の試行ほど書くことはありませんが、それでも多くのテキスト-.-

4

2 に答える 2

1

C# (C# 4 以降) はデフォルト値をサポートしていますが、それらは引数リストの最後の引数でなければなりません

以下のように:

public void plus(int a1, int a2, int a3 = 1, int a4 = 2, int a5 = 3)

于 2013-08-14T10:11:30.567 に答える