```csharp=
void Add(int i, int j) =>
Console.WriteLine(i + j);
void Sub(int i, int j) =>
Console.WriteLine(i - j);
void Mul(int i, int j) =>
Console.WriteLine(i * j);
void Div(int i, int j) =>
Console.WriteLine(i / j);
//1.
delegate void MyDelegate(int i, int j);
//2.
MyDelegate compute = new MyDelegate(Add);
//3.
compute.Invoke(20, 4);
//========================================
//
//
//2.
MyDelegate compute = new MyDelegate(Add);
MyDelegate compute2 = Sub;
MyDelegate compute3 = Mul;
//3.
compute.Invoke(20, 4);
compute2.Invoke(20, 4);
compute3(20, 4);
//=====================================
//multicast
//2.
MyDelegate compute = Add;
compute += Sub;
compute += Mul;
compute += Div;
//3.
compute.Invoke(20, 4);
//=====================================
//?.
//2.
MyDelegate compute = Add;
compute -= Add;
//3.
compute?.Invoke(20, 4);
void Add(int i, int j) =>
Console.WriteLine(i + j);
void Sub(int i, int j) =>
Console.WriteLine(i - j);
void Mul(int i, int j) =>
Console.WriteLine(i * j);
void Div(int i, int j) =>
Console.WriteLine(i / j);
//============================
delegate void Print(string s);
Print print=Console.WriteLine;
print.Invoke("xxxx");
//============================
//generic delegate
Action<string> print=Console.WriteLine;
print.Invoke("xxxx");
//2.
Action<int,int> compute = Add;
//===========================
DateTime GetTime()=>DateTime.Now;
Func<DateTime> time = GetTime;
Console.WriteLine(time());
//===========================
//event
private void Form1_MouseMove(object sender,
MouseEventArgs e)
{
Text = $"X:{e.X} Y:{e.Y}";
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
MouseMove += Form1_MouseMove;
}
else
{
MouseMove -= Form1_MouseMove;
}
}
//===================================
class Account
{
public void PrintTransactions()
{
for (int i = 0; i <= 10; i++)
{
// 模擬查詢並列印交易明細...
Thread.Sleep(300);
}
Console.WriteLine("交易明細列印完畢!")
}
}
Account acct = new Account();
Console.WriteLine("開始列印");
acct.PrintTransactions();
//==================================
class Account
{
//1.
public event EventHandler<ProgressChangedEventArgs> ProgressChanged;
public void PrintTransactions()
{
for (int i = 0; i <= 10; i++)
{
// 模擬查詢並列印交易明細...
Thread.Sleep(300);
//2.
ProgressChanged?.Invoke(this, new ProgressChangedEventArgs(i*10,null));
}
Console.WriteLine("交易明細列印完畢!");
}
}
internal class Program
{
static void Main(string[] args)
{
Account acct = new Account();
//3.
acct.ProgressChanged += Acct_ProgressChanged;
Console.WriteLine("開始列印");
acct.PrintTransactions();
}
//4.
private static void Acct_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine($"進度: {e.ProgressPercentage} %");
}
}
//============================
//3.
//acct.ProgressChanged += delegate(object sender, ProgressChangedEventArgs e)
//{
// Console.WriteLine($"進度: {e.ProgressPercentage} %");
//};
acct.ProgressChanged += delegate
{
Console.Write('.');
};
//====================================
//lambda expression
acct.ProgressChanged += (sender, e) =>
Console.WriteLine($"進度: {e.ProgressPercentage} %");
```