如何将进度条声明为可选参数?
这是功能:
public int Factorial(int number, System.Windows.Forms.Label l, System.Windows.Forms.ProgressBar newprogressbar, int time=0)
{
....
}
该功能有四个参数。只有int number
和标签l
应该是必需的。
time
已经是可选的,但我不知道如何使新的进度条可选。
该函数返回数字的 factorial ,并使用标签显示它。
进度条应该显示堆栈的状态,时间应该是函数的工作速度,但这两个应该是可选的。
我已经完成了这个功能,但我仍然需要弄清楚如何使进度条可选。
答案 0 :(得分:3)
将声明任何其他参数设置为可选的方法相同 - 指定默认值。但是,默认值具有是一个常量,对于string
以外的引用类型,它基本上意味着null
:
public int Factorial(int number, Label l, ProgressBar newProgressBar = null,
int time = 0) {
但我个人会改变设计。您可以传入一个代理,而不是让Factorial
知道“如何计算因子值”和“如何显示进度”,而是传递代理:
public int Factorial(int number, Action<int> progressAction, int time = 0) {
...然后在循环的每次迭代中调用该进度操作(这是我假设您使用进度条执行的操作)。
这改善了关注点的分离。如果您不想在所有情况下都指出进度,可以将progressAction
默认为null
。
另一种选择是完全反转控件,并将Factorial
视为一系列值 - 使用迭代器块轻松完成:
public IEnumerable<int> Factorial()
{
for (...)
{
// Do work
yield return currentValue;
}
}
您可以单独施加时间限制(我假设是time
参数的用途?),这样调用者可以计算出迭代次数以及如何处理结果。 Factorial
方法仅知道如何生成一系列阶乘数。
答案 1 :(得分:0)
ProgressBar最终派生自System.Object,因此您只需编写
即可public int Factorial(int number, System.Windows.Forms.Label l,
System.Windows.Forms.ProgressBar newprogressbar = null, int time=0)
要检查方法是否已定义,只需写入
if (newprogressbar != null)
{
// Do something with newprogressbar
}