自动功能过载
本文关键字:功能 | 更新日期: 2023-09-27 18:27:40
我不知道我是否只是搜索了错误的术语,但我想知道是否有可能在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);
附言:在我的实际问题中(我不确定是否允许我发布),这不仅仅是一个额外的操作。它构建了一个启动工具的参数:
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');
}
}
取决于给定与否的参数。。。这不像我第一次尝试时写的那么多,但仍然有很多文本
如果您有同质参数,请使用params。有些语言有类似的结构,例如C++11。
但是,对于许多不同的参数类型,可以使用命名参数和默认值。
C#(从C#4开始)支持默认值。。但是,它们必须是参数列表中的最后一个参数。
如下:
public void plus(int a1, int a2, int a3 = 1, int a4 = 2, int a5 = 3)
等等。