一、C#的扩展方法
1.在不修改代码的情况下,为其增加新的功能,但是还不会改变微软的数组类,为他增加新的方法
2.三要素:
(1)拓展方法所在的类必须是静态类
(2)在第一个参数上,使用this关键字来进行修饰
(3)在另一个命名空间下
3.作用
让调用者方便调用该方法,就好像在调用自身类型的方法一样
二、事件
1.当某一对象达到某种条件或者发生某种改变时,将消息及时的通知到其他对象。
事件源——注册——>响应者 (注册的本质就是将方法的地址放在委托链上)
2.使用
(1)定义事件参数类 xxxEventArgs:封装引发事件时需要由事件源传递给响应者的信息
(2)定义委托:public delegate void xxxEventHandler(xxxEventArgs);
(3)定义事件源类:
——基于委托声明事件 public event xxxEventHandler xxx;
——在某个方法内部引发事件
(4)响应者
——实例化事件源对象
——注册方法:对象名.事件名+=方法名
注意:第一注册 即用到了 += 或者 -= ; 事件不可以在外部调用
(委托的第一次注册则需要=,之后才可以用+=,-=的操作)
3.作用:
仅允许类的外部注册、注销事件,防止例如清空委托链、直接引发事件等不正当操作,体现了封装思想
4.委托和事件的区别
委托的缺点:
(1)绑定多个方法,但运算符不一致,= +=,当你绑定多个方法时,第一个用=,后面用+=
(2)对外界提供了太多东西,违背了封装的思想,其他类可以直接调用委托,其他类也可以直接清空委托链
事件的优点
(1)运算符一直,都是用+= -=
(2)只能在其他类进行绑定和解除事件,其他类不能直接调用事件,其他类不能直接清空委托链
5.事件标注写法
public delegate void EventHandler(Object sender, EventArgs e);
//sender 事件的发起者 e 事件参数
(1)回顾 :向上转型
as 如果不能转换则返回null;is 能转换则为true,不能则返回false
二、UGUI
1.canvas 画布
同一画布下,按照Hierarchy层级的顺序进行渲染
不同画不下,通过调整 SortOder 来决定渲染顺序
2.Canvas 画布
Render Mode :
ScreenSpace-Overlay 覆盖模式
ScreenSpace-Camera 相机模式
WorldSpace 世界模式
3.image
pivot 轴心点
Anchors 锚点
4. 当画布为OverLay时,世界坐标系(单位:米)等同于屏幕坐标系(单位:像素)
此时 可以使用 this.transform.position 来表示所挂载脚本的位置
当前的轴心点相对于父UI轴心点的位置 transform.localposition