【转】编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护
2021-04-24 18:25
标签:another upload 问题 main 出现 rgs 方法 -- 文件 建议40:使用event关键字为委托施加保护 在建议中我们实现了一个具有通知功能的文件传输类,如下: 像这样调用: 以上调用者代码本身是和FileUploader类一起的,这起码存在两个问题: 1)如果在Main中另起一个线程,该工作线程则可以将FileProgress委托链置为空: 2)可以在外部调用FileUploaded,如: 这应该是不允许的,因为什么时候通知调用者,应该是FileUploader类自己的职责,而不是调用者本身来决定的。event关键字正是在这种情况下被提出来的,它为委托加了保护。 将 改为: 这样,上面提到的几种情况就会被阻止: 以上代码将编译不通过: 事件“MyTest.FileUploader.FileUploaded”只能出现在 += 或 -= 的左边(从类型“MyTest.FileUploader”中使用时除外) 转自:《编写高质量代码改善C#程序的157个建议》陆敏技 【转】编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护 标签:another upload 问题 main 出现 rgs 方法 -- 文件 原文地址:http://www.cnblogs.com/farmer-y/p/7943780.html class FileUploader
{
public delegate void FileUploadedHandler(int progress);
public FileUploadedHandler FileUploaded;
public void Upload()
{
int fileProgress = 100;
while (fileProgress > 0)
{
//传输代码,省略
fileProgress--;
if (FileUploaded != null)
{
FileUploaded(fileProgress);
}
}
}
}
static void Main(string[] args)
{
FileUploader f1=new FileUploader();
f1.FileUploaded = Progress;
f1.FileUploaded = ProgressAnother;
f1.Upload();
Console.Read();
}
static void Progress(int progress)
{
Console.WriteLine(progress);
}
static void ProgressAnother(int progress)
{
Console.WriteLine("另一个方法:{0}", progress);
}
f1.FileUploaded = null;
f1.FileUploaded(10) ;
public FileUploadedHandler FileUploaded;
public event FileUploadedHandler FileUploaded;
f1.FileUploaded = null;
f1.FileUploaded = Progress;
f1.FileUploaded = ProgressAnother;
文章标题:【转】编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护
文章链接:http://soscw.com/index.php/essay/79049.html