我讀了一些文章這是由下面的例子 描述用代表這表明使用多播委託爲什麼要使用委託在.net
public delegate void ProgressReporter(int percentComplete);
class Program
{
static void Main(string[] args)
{
ProgressReporter p = WriteProgressToConsole;
p += WriteProgressToFile;
Utility.HardWork();
}
private static void WriteProgressToConsole(int percentComplete)
{
Console.WriteLine(percentComplete);
}
private static void WriteProgressToFile(int percentComplete)
{
System.IO.File.WriteAllText("progress.txt", percentComplete.ToString());
}
}
public static class Utility
{
public static void HardWork(ProgressReporter p)
{
for (int i = 0; i < 10; i++)
{
p(i);
System.Threading.Thread.Sleep(1000);
}
}
}
但是從我的,我認爲代碼的理解同樣可使用的一類,並具有限定由委託處理程序完成的任務如下
public static class ProgressReporter
{
public static void WriteProgressToConsole(int percentComplete)
{
Console.WriteLine(percentComplete);
}
public static void WriteProgressToFile(int percentComplete)
{
System.IO.File.WriteAllText("progress.txt", percentComplete.ToString());
}
}
並改變工具類勤勞()如下
0123相同的功能來實現public static class Utility
{
public static void HardWork()
{
for (int i = 0; i < 10; i++)
{
ProgressReporter.WriteProgressToConsole(i * 10);
ProgressReporter.WriteProgressToFile(i * 10);
System.Threading.Thread.Sleep(1000);
}
}
}
所以我關於這個代碼的問題是,爲什麼我們實際上首先需要一個委託?
一些原因(PLZ糾正如果我錯了),我認爲我們需要委託如下 -
- 如果我們在程序類本身需要通知,那麼我們需要的代表。
- 在多播委託的幫助下,我們可以同時調用多個函數,而不是多次調用它們(如我的第二種情況)。
可能重複(http://stackoverflow.com/questions/3567478/delegates-why) –