据我所知,我发现有两种方法可以将参数传递给函数, - 作为函数签名中的参数或 - 收集对象中的参数
实施例: 如果我有一个求和函数
public int Sum(parameters)
我需要知道传递参数哪个更好,就像这样
public int Sum(int x, int y) {
return x+y;
}
还是那样?
public int Sum(Number no) {
return no.X + no.Y;
}
public class Number {
public int X {get;set;}
public int Y {get;set;}
}
答案 0 :(得分:1)
没有显着差异。第二种方法是将对象置于对象内部,称为封装。如果你有很多参数或一组通用的参数传递给其他方法,封装通常会更好。对封装有一个非常轻微的处理影响,但它不应该以任何可感知的方式影响你。
将每个变量分开对于较小的参数集以及不太倾向于将这些参数传递给其他方法的方法更有意义。
最后,它取决于你使用的是什么。正如我之前所说,封装的影响可以忽略不计,但它可能是一个麻烦定义类和结构的一切。我通常使用封装,如果有多个方法常用的变量集合,多个方法都使用。然后某些方法可以忽略他们不需要的变量。
奖金事实
如果您希望方法能够接受任意数量的事物,那么还有第三种传递参数的方法。这是使用参数的params
关键字完成的,然后获取所有提供的参数并将它们粘贴到数组中。在你的总结案例中,工作如下:
public int Sum(params int[] args) //Accepts any number of int parameters
{
int result = 0;
for(int i = 0; i < args.Length; ++i)
{
result += args[i];
}
return result;
}
然后可以这样调用:
Sum(1, 2);
Sum(1, 2, 3, 4, 5, 6, 7, 8);
or even
Sum(1);
params
往往使用次数较少,而且我不确定它的处理效果,但如果您需要,它就会存在。
答案 1 :(得分:0)
这取决于您的要求以及传递给函数所需的参数数量。但是如果你想传递许多参数,那么你应该通过创建属性来使用第二种方法。这将是简单而有效的。
答案 2 :(得分:0)
这实际上取决于你的功能的复杂性。在这个例子中,更好的方法是第一个。因为你不需要创建新的对象来总结它。如果你有必要正确或阅读不同的时间返回你的班级,你必须使用第二个。
答案 3 :(得分:0)
实际上,您应该决定应用程序将具有哪种数据结构,并在此之后使用该结构传递给方法。它是一个很好的规则,不能生成你不需要的结构。有时你可以指出几个参数有逻辑关系,并且总是(几乎总是)一起传递方法。在这种情况下,我将建议将它们封装到结构
中答案 4 :(得分:0)
我会尝试总是首选,因为从方法签名中可以清楚地知道它实际上做了什么,同时你确定你只传递了实际需要的方法。
而且如果你看到你的方法有太多的参数,它可能会警告设计不良的信号。所以最终第二选择可能只是一个黑客如何隐藏一些设计问题。