我正在学习如何使用 C# 的接口(interface), 我读这篇文章: http://www.codeproject.com/Articles/286863/I-Interface
例子之一:
public class TaskComposite : ITask
{
public TaskComposite(params ITask[] tasks)
{
this.composedTasks = new List<ITask>();
if(tasks != null)
{
foreach(var task in tasks)
AddTask(task);
}
}
public void Do()
{
foreach(var task in this.composedTasks)
task.Do();
}
public void AddTask(ITask task)
{
if(task != null)
this.composedTasks.Add(task);
}
private List<ITask> composedTasks;
}
描述说:
we can group a load of tasks together to be executed serially.
我创建了一个 Windows 窗体作为创建 TaskComposite 类的一个新实例,但是接下来我应该做什么?
public partial class FormInterface : Form
{
public FormInterface()
{
InitializeComponent();
}
private void FormInterface_Load(object sender, EventArgs e)
{
ITask[] TaskAry = new ITask[] { };
TaskAry[0] = new TaskClass().Do(); //<=Error
TaskComposite tc = new TaskComposite(TaskAry);
}
class TaskClass : ITask
{
public void Do()
{
Console.WriteLine(DateTime.Now.ToString());
}
}
}
最佳答案
你这里有几个错误。
首先,当你创建一个数组时,你应该指定它的大小,或者初始化它。这是集合(具有可变大小)和数组之间的区别。所以,你应该提供尺寸
ITask[] TaskAry = new ITask[1];
TaskAry[0] = new TaskClass();
或初始化(大小将由编译器计算):
ITask[] TaskAry = new ITask[] { new TaskClass() };
但在您的情况下,当使用 params ITask[] tasks
时,您可以简单地传递任务列表:
TaskComposite tc = new TaskComposite(new TaskClass());
图案 Composite允许您将一组对象视为单个对象。在您的情况下,此处的复合任务允许您将多个任务视为一个任务对象。因此,如果没有复合任务,您将需要使用任务数组/集合并手动执行每个任务。像这样:
ITask[] tasks = new ITask[] { new TaskClass(), new TaskClass() };
foreach(ITask task in tasks)
task.Do();
对于复合任务,您不需要遍历所有任务:
ITask compositeTask = new TaskComposite(new TaskClass(), new TaskClass());
compositeTask.Do(); // executes all tasks
您可以在需要简单 ITask 的地方传递复合任务。而且没有人会知道实际上有一堆任务。
关于c# - 数组作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546912/