17.委托

.NET框架使用委托delegate来提供回调函数机制。

class Set
{
    private Object[] items;
    public Set(int numItems)
    {
        items = new Object[numItems];
        for (int i = 0; i < numItems; i++)
        {
            items[i] = i;
        }
    }
    public delegate void Feedback(Object value, int item, int numItems);
  //定义了一个共有委托类型Feedback,委托表示一个回调方法签名,故Feedback委托表示一个接受3个参数,且返回值为void的回调方法
    public void ProcessItems(Feedback feedback)
    {
        for (int item = 0; item < items.Length; item++)
        {
            if (feedback != null)
            {
                feedback(items[item],item+1,items.Length);
            }
        }               //ProcessItems方法接受一个参数feedback,然后调用由feedback变量所指定的回调方法
    }
}

1.使用委托回调静态方法

static void StaticCallbacks()
{
    Set setofItems = new Set(5);
    setofItems.ProcessItems(null);
    //传递给feedback参数的值为null,不会调用任何回调方法

    setofItems.ProcessItems(new Set.Feedback(/**//*method*/));
    //构造一个委托对象,封装一个方法method,这使得该方法可以通过委托封装进行间接回调

    Set.Feedback fb = null;
    fb += new Set.Feedback(/**//*method1*/);
    fb += new Set.Feedback(/**//*method2*/);
    setofItems.ProcessItems(fb);
    //委托链,所有回调的方法都必须接受相同参数,返回值类型
}

2.使用委托回调实例方法

与调用静态方法不同的是,回调实例方法需要构造一个对象

App appobj=new App();
setOfItems.ProcessItems(new Set.Feedback(appobj.FeedbackToFile));

18.异常

异常对象都包含一个描述字符串和一个堆栈踪迹。微软规定所有和CLS兼容的编程语言都必须能够抛出并捕获那些继承自System.Exception的异常类型。

void  SomeMethod()  {
         try  {

//需要异常恢复和资源清理的操作代码;或可能会抛出异常的代码

//单独一个try块是没有任何意义的

}

catch(异常筛选器exception filter)  {

//异常恢复代码 ,出现异常时需要执行的响应代码

//异常筛选器本身是一个类型;代码执行时是自上而下搜索catch块的,应将更具体的异常放在上面,否则会产生个错误

}

finally {

//包含确保要执行的代码,一般是资源清理代码

//不管线程是否抛出异常,该代码块中的代码都能确保被执行

//一个try块并非必须要有一个finally块相关联,因为有时候try块中的代码并不需要任何清理工作;但一个try块最多只能有一个相关联的finally块

}

}

异常不是错误,它是对程序接口隐含假设的一种违反。这里的程序接口是指属性的数据类型,方法的参数,返回值等。通过抛出异常,一个方法可以通知它的调用程序它所做的假设被违反了。

如何正确使用异常?

a.       避免过多的finally块;C#提供了lock和using语句,是编译器自动产生try块和finally块,其中finally块就是清理代码,它们编译产生的结果是一样的。

b.      避免直接用System.Exception异常筛选器捕获所有异常,因为系统随时可能抛出StackOverflowException或OutOfMemoryException

c.       当异常无法修复时,回滚部分完成的操作

转载于:https://www.cnblogs.com/yuxhust/archive/2009/03/15/1412490.html

.NET Framework学习笔记(十)相关推荐

  1. IOS之学习笔记十五(协议和委托的使用)

    1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...

  2. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  3. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

  4. 吴恩达《机器学习》学习笔记十——神经网络相关(2)

    吴恩达<机器学习>学习笔记十--神经网络相关(2) 一. 代价函数 二. 反向传播算法 三. 理解反向传播算法 四. 梯度检测 五. 随机初始化 1.全部初始化为0的问题 2.随机初始化的 ...

  5. Mr.J-- jQuery学习笔记(十九)--自定义动画实现图标特效

    之前有写过自定义动画Mr.J-- jQuery学习笔记(十八)--自定义动画 这次实现一个小demo 图标特效 页面渲染 <!DOCTYPE html> <html lang=&qu ...

  6. Mr.J-- jQuery学习笔记(十六)--展开和收起动画折叠菜单的实现

    之前写过动画的隐藏与显示:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 动画隐藏与显示的一个小demo--对联广告:Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告 与动 ...

  7. Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告

    请看之前的:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 话不多说,直接上demo <!DOCTYPE html> <html lang="en"& ...

  8. kvm虚拟化学习笔记(十)之kvm虚拟机快照备份

    KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装 http://koumm.blog ...

  9. mysql 临时表 事务_MySQL学习笔记十:游标/动态SQL/临时表/事务

    逆天十三少 发表于:2020-11-12 08:12 阅读: 90次 这篇教程主要讲解了MySQL学习笔记十:游标/动态SQL/临时表/事务,并附有相关的代码样列,我觉得非常有帮助,现在分享出来大家一 ...

  10. ROS学习笔记十二:使用roswtf

    ROS学习笔记十二:使用roswtf 在使用ROS过程中,roswtf工具可以为我们提供ROS系统是否正常工作的检查作用. 注意:在进行下列操作之前,请确保roscore没有运行. 检查ROS是否安装 ...

最新文章

  1. 突破DBMS局限性,阿里借力Spark提升查询性能
  2. iOS自动化测试之Appium的安装和使用
  3. BGP community
  4. Python爬虫:用BeautifulSoup进行NBA数据爬取
  5. 【 Perl 】三种方式解决” Wide character in print “
  6. C语言获取系统时间的函数
  7. 广数980td系列2级密码及相关操作
  8. K3 Cloud 常用语法及常见异常
  9. 前端css文本、单词、字母强制换行
  10. 基于单片机的水库控制系统设计
  11. Python编程:字典
  12. struts标签+jstl标签之国际化实例
  13. PHP curl实现GET请求
  14. 华硕主板无盘启动bios设置_华硕主板开机怎么进入bios_华硕主板bios设置U盘启动方法...
  15. ffiddler抓取手机(app)https包
  16. Process用法与进程详解
  17. Windows 控件 Microsoft.Office.Interop.Excel 复制sheet
  18. python验证码识别库底色深_基于机器学习的验证码识别
  19. kebab-case
  20. 【2019.07.09】java 二维数组、将二维数组传递给方法

热门文章

  1. windows下python安装
  2. 非会员只能试看20分钟_做欧包都要把铁锅烤半小时?太费电了,用我这办法只需预热几分钟...
  3. 微信团队分享:微信移动端的全文检索多音字问题解决方案
  4. 不确定屏幕大小的弹窗垂直居中(用了box方法)
  5. cocos2d-x 2.2 创建项目
  6. dexpler的使用方法
  7. bzoj3212 pku3468 A Simple Problem with Integers
  8. 状态开关按钮(ToggleButton)及按钮(Swich)的使用
  9. java pojo 转 map_JSON和JAVA的POJO的相互转换
  10. java变换变量赋值_Java变量的类型转换