热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

黑马程序员---委托与事件的区别与联系

事件与委托:使用委托变量,为什么使用事件属性(同字段与属性的区别)外部使用委托时会出现的问题:1由于可能同

          事件与委托:

   使用委托变量,为什么使用事件属性(同字段与属性的区别)
            外部使用委托时会出现的问题:
            1 由于可能同一个方法可能会重复添加,但最后的添加不是+=而是写成了=,就表示只赋值了最后一个,
            会出现委托链的问题 ,外部只能用+=为委托赋值。

           2 有可能不通过事件方法而直接调用委托,只能通过底层的事件方法调用委托,外部不能调用委托。
            综上:委托只能在内部调用,不能在外部调用,在外部赋值时只能用+=
            属性中的只写属性正好满足要求。
            故增加event关键字将其定义为类的委托类型的事件变量,(正如属性对字段的保护一样),这样,
            就能利用事件(实质是属性,更实质是方法,也就是事件方法)保护委托,事件有两个方法add和remove方法,
            分别通过+=和-=为私有变量委托添加和移除注册的方法,事件也是一个委托类型的变量,把事件当委托变量使用

  事件概念:

         事件就是一个特殊的委托类型的变量(前有event修饰),是一个私有的委托变量加上两个add和remove方法。公共的事件属性是对私有委托字段的封装,外部只能对事件通过+=和-=为委托字段添加和移除方法。就像以前学的属性对字段的封装一样。
         

         委托和事件的区别:
            事件是一个私有的委托变量,加上两个方法:add和remove方法,在外界通过+=和-=进行赋值操作
            事件机制可以避免在其他无关方法中提供委托调用功能,造成委托盗用。  
            
 委托是类型,事件是委托类型的变量,

     用户触发事件的执行过程:
         触发控件事件---系统自动调用底层的控件的事件方法---调用委托---执行方法。而我们现在在定义Form窗体类的时候,只需处理为控件添加事件,及事件注册方法。其他均为底层的东西,一般用不到。例如,需要重写事件的时候:
           点三次触发事件:需要定义继承于事件类(如button类)的自定义控件类,定义类的public委托类型的事件属性, 重写onclick事件方法调用委托, 
            然后1 在外部类中定义方法,同过+=和-=为事件添加方法,从而注册事件(定义事件与方法并添加)。(自动生成:类名.事件名+=写出来后按下两次Tab键,系统自动生成)
            2 在设计器中找到控件类的事件属性,双击,自动添加方法,并在designer中自动注册事件。



      



推荐阅读
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 小程序获取用户信息按钮返回中文地址
    1.我是根据官方文档中描述去写的按钮 可以看到button中加了zh_CNopen-typegetUserInfobindgetuserinfogetU ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 在JavaScript中,函数没有重载的概念,如果声明了多个重名的函数,不管函数的形参个数是否一样,只有最后一个有效。如果调用函数时传入的参数个数与函数定义时的参数个数不符,会出现不同的情况。函数调用时,传入的参数个数少于函数定义时的参数个数,未传入的参数会被当做undefined处理,可能会导致错误。而传入的参数个数多于函数定义时的参数个数,多余的参数不会被使用,但不会报错。 ... [详细]
author-avatar
mobiledu2502921033
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有