需求:將 0~99 的數字分別輸出到 Console、ListBox、文字檔,並支援組合輸出。
public delegate void ShowNumberDel(object[] items);
public class ProcessNumber
{
private readonly object[] _items;
public ProcessNumber(int max)
{
_items = new object[max];
for (int i = 0; i < max; i++) _items[i] = i;
}
public void ProcessItems(ShowNumberDel show) => show(_items);
}
public partial class Form1 : Form
{
private readonly ProcessNumber _pn = new ProcessNumber(100);
private ShowNumberDel _del;
public Form1() => InitializeComponent();
// 三種具體輸出方法
private void ShowInConsole(object[] items)
{
foreach (var item in items) Console.WriteLine(item);
}
private void ShowInListBox(object[] items)
{
listBox1.Items.Clear();
foreach (var item in items) listBox1.Items.Add(item);
}
private void ShowInFile(object[] items)
{
using var sw = new StreamWriter("Test.txt", true);
foreach (var item in items) sw.WriteLine(item);
}
// 單一輸出按鈕
private void btnConsole_Click(object sender, EventArgs e) =>
_pn.ProcessItems(new ShowNumberDel(ShowInConsole));
private void btnListBox_Click(object sender, EventArgs e) =>
_pn.ProcessItems(new ShowNumberDel(ShowInListBox));
private void btnFile_Click(object sender, EventArgs e) =>
_pn.ProcessItems(new ShowNumberDel(ShowInFile));
// 組合輸出:多播委派
private void btnCombo_Click(object sender, EventArgs e)
{
_del = null;
_del += new ShowNumberDel(ShowInListBox);
_del += new ShowNumberDel(ShowInFile);
_pn.ProcessItems(_del);
}
}

_del += ... 組合多播委派,呼叫時依序執行所有目標+= 實際產生新實例