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 个函数。

我想到的唯一可能性是在应该使用默认值的地方给出空值,例如:

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

2

如果您有同质参数,请改用params。一些语言有类似的结构,例如 C++11。

但是,对于许多不同的参数类型,您可以使用命名参数和默认值。

于 2013-08-14T10:13:51.607 回答
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 回答