【基础知识】.Net基础加强10天
一、 复习
1. 委托是类型,还是一种引用类型。
2. 使用委托的时候必须new一个委托对象。即便看到代码中没有new委托对象,编译器也会在编译的时候帮我们new赋值给委托的方法,其实是存储在委托对象中的。
3. 使用委托的步骤:
1> 定义一个委托类型:public delegate voi d 委托的名称(参数列表);
2> 声明一个委托变量:委托名称wd = new委托名称(方法名称);
3> 调用委托:
在调用委托之前需要判断一下是否为空
If (wd !=null)
{
//开始调用委托
Wd();或者wd.Invoke();
}
4. 委托的作用:
当一个类型中需要嵌入一段代码,但是这段代码具有不确定性,是根据使用这个类型的用户来确定代码的,这种情况下就可以在该类型中使用一个委托,保证在某种情况下会调用这个方法。(简述:在一段代码中动态添加一个方法。)
自定义控件是的事件会大量用到委托。(些事件的时候用到委托)
/.、可以把静态方法或私有方法赋值给委托变量,赋值后只要能使用到该委托变量的地方就能使用该方法。打破了访问修饰符的限制。
二、 多播委托
1. 多播委托中方法调用的顺序与增加方法时的顺序是一致的,但是不要依赖于这个顺序。
微软并没有承诺一定是按这种顺序。
2. 多播委托中,如果要是有返回值,只会得到最后一个方法调用的返回结果。
3. 多播委托获取返回值:
a) 通过遍历,调用委托中的每个方法,实现获取每个方法的返回值。
b) 通过调用GetInvocationList()方法,返回当前委托中的所有方法,返回值类型是一个Delegate数组(委托数组)
c) 多播委托内部是将绑定在当前委托对象上的每个方法,都转换为一个委托对象,并且存储在了一个叫_invocationLIst的object 数组中。
d) 然后当调用委托的时候,其实就是循环遍历_invocationList数组,并且调用其中的每一个委托。
4. 多播委托中如果其中一个方法执行是发生异常时,则后续方法不执行。
5. 去掉一个方法,md = md – m4;
6. 使用多播委托时,如果不是用+=而是直接使用=赋值,会将前面绑定的所有方法(委托)覆盖掉。
7. 委托的不可变性:
a) 委托有类似于string的不可变性
b) 
8. 建议使用的时候尽量少定义委托自己的委托,尽量使用系统中已经有的委托。减少程序集中定义的类型的个数。
9. 委托的一些应用:
a) 多线程
b) 自定义类(控件/通信类/(事件))
c) 正则表达式中替换Email掩码
三、 事件
1. 通过委托实现事件的功能的问题;(因此不用委托而用事件)
a) 可以在类的外部触发。因为委托变量访问修饰符是public 的,所以在任何地方都可以触发。 如果把委托变量的访问修饰符改成private 的。那么的确不能在外部触发了,但是也不能在外部赋值了。
b) 由于委托可以使用等号来赋值,所以就有可能将前面所有已经注册的事件处理程序覆盖掉。
2. 什么事件?
a) 在使用事件之前必须定义委托,否则无法使用事件。
b) 定义了委托类型之后开始使用事件:public event 委托类型 m;
3. 使用事件的好处:
a) 因为事件只能通过+=或者-=来赋值,所以避免了使用=赋值覆盖的问题。
b) 事件不能在定义事件的类的外部触发,只能在那个类内部触发。所以也就避免了冒充事件触发的问题。
4. 事件就是一个私有的委托变量和两个共有的方法Add和Remove,分别是来实现事件的+=和-=


四、 委托和事件的区别(常考)
1. 委托和事件没有可比性,因为委托是类型,事件是对象(可以理解为对委托变量的封装。d),下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。(举例子:三种实现事件方式的区别)
2. 因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。add、remove。
3. 事件是用来阉割委托实例的。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能=、不能外部触发事件。
五、 程序集(Assembly)
1. 只是在.net中的概念。.net中exe和dll 都是程序集。(exe和dll的区别:exe包含主函数可以被执行,dl不包含主函数,不可执行)
2. 程序集包含:类型元数据(描述在代码中定义的每一类型和成员,二进制形式)、程序集元数据(程序集清单、版本号、名称等)、IL代码(这些都被装在exe或dll中)、资源文件。每个程序集都有自己的名称、版本等信息。这些信息可以通过AssemblyInfo.cs文件来自己定义。
六、 反射
1. Type类

课后小项目:
记事本+插件开发,这是我根据本课内容写的小程序。
2014年2月27日09:41:23 郝喜路
【基础知识】.Net基础加强10天的更多相关文章
- Linux基础知识与基础命令
Linux基础知识与基础命令 系统目录 Linux只有一个根目录,没有盘符的概念,文件目录是一个倒立的树形结构. 常用的目录功能 bin 与程序相关的文件 boot 与系统启动相关 cdrom 与Li ...
- day63:Linux:nginx基础知识&nginx基础模块
目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...
- java线程基础知识----线程基础知识
不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...
- 这些C++基础知识的基础知识你都学会了吗?
一.C++基础知识 新的数据类型 C语言中的数据类型 C++中新的数据类型 思考:新的数据类型有什么好处?请看下面的代码: 可以见得:新的类型使整个程序更加简洁,程序变得易读易懂!这个就是bool ...
- Java基础知识强化49:10个实用的但偏执的Java编程技术
1. 将String字符串放在最前面 为了防止偶发性的NullPointerException 异常,我们通常将String放置在equals()函数的左边来实现字符串比较,如下代码: // Bad ...
- Ceph基础知识和基础架构认识
1 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务.在虚拟化领域里,比较常用到的是Cep ...
- Ceph 基础知识和基础架构认识
1 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务.在虚拟化领域里,比较常用到的是Cep ...
- 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)
在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...
- JavaScript基础知识----零基础js入门练习题
1,什么是Javascript? 答:Javascipt是一种脚本语言,由web浏览器进行解释和执行. 2,JavaScript是由那几个部分组成? 答:主要分为以下三种: ECMASc ...
- 集合框架基础知识-----java基础知识
Java集合框架 :接口:Collection.List .Set. Map:实现类:ArrayList.LinkedList.Vector.HashSet.TreeSet.HashMap.HashT ...
随机推荐
- java 枚举类 enum 总结
枚举定义: enum是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量 ...
- Deep Learning(深度学习)学习笔记整理
申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表 ...
- MS sql server 基础知识回顾(二)-表连接和子查询
五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...
- JQuery 简单的文字超出部分隐藏下拉显示
HTML代码: <body> <div class="txt_bos"><!--在每一个放置文字的class外面包一个div,以便设置动画样式用,同样 ...
- Razor引擎中的_ViewStart.cshtml
Startup Code是在所有View执行之前加载和执行的代码. 在Razor引擎中的_ViewStart.cshtml 就是装载这些“预执行代码”的文件,它有两个特点: 一.就是所有View执行之 ...
- TCP/IP、Http的区别
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只 ...
- Bridge(桥接)-对象结构型模式
1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 2.动机 在抽象类与它的实现之间起到桥梁作用,使它们可以独立地变化. 3.适用性 不希望在抽象和它的实现部分之间有一个固定的绑定关系. ...
- 奇怪的margin,padding,table
为什么有的时候margin,padding不管用?写了float以后就管用了? 为什么table 不给width,就默认是100%,里面的td会平均分配teble的宽度,若你想给其中一些td宽度,剩下 ...
- UIImageView、UISlider、UISwitch、UIStepper、UISegmentControl
UIImageView——图像视图 作用:专门用来显示图片的控件 . 设置图像 [self.imageView setImage:[UIImage imageNamed:@"abc.png& ...
- SAP 如何查看用户登录信息
1.首先进入事务代码 SM19 配置审计参数文件 2.选择客户端,用户名,并且勾选过滤激活之后点击细节配置,进入如下界面: 配置完成之后,点击保存. 3.并且可以进入SM20界面,选择要查看的客户端 ...