一,委托

  • 委托封装了包含特殊返回类型和一组参数的行为,类似包含单一方法接口。
  • 委托类型声明中所描述的类型签名决定了哪个方法可以用于创建委托实例,同时决定了调用的签名:委托类型实际上只是参数类型的一个列表以及一个返回类型
  • 创建委托实例,需要一个方法已经调用该方法的目标:

void Invoke(string input)具有个委托相同的类型和相同的参数

  • 委托实例不易变形: 委托是不易变的。委托实例就和string一样。Delegate.Combine和string.Concat很像,都是合并现有的实例形   成一个新实例
  • 每个委托实例都包含一个调用列表——一个操作列表:
委托实例还有一个调用列表与之关联,如下图:
  • 委托实例可以合并到一起,也可以从委托实例中删除另一个
  • 事件不是委托实例,只是成对的add/remove方法(类似属性的取值和赋值)
delegate void StringProcessor(string input);//委托签名
class Person
{
string name;
public Person(string name)
{
this.name = name;
}
 
public void Say(string msg)
{
Console.WriteLine("{0}agy:{1}", name, msg);
}
public void tu(string msg)
{
Console.WriteLine("{0}agy:{1}", name, msg);
}
}

#region 委托事件
Person jon = new Person("Jon");
Person tom = new Person("tom");
StringProcessor jons, toms, background;///创建委托实例
jons = new StringProcessor(jon.Say);//委托实例使用的方法
toms = new StringProcessor(tom.Say);
background = new StringProcessor(Backgroud.Note);
jons += toms;
jons("Hello,jon");
toms("Hello,tom");
background("note");
#endregion

二,类型系统特征

  • C#1是静态类型的——编译器知道你能使用哪些成员:每个变量都有一个特并的类型,而且该类型在编译时是已知的,只有该类型已知的操作才被允许。
  • C#1是显示的——必须告诉编译器变量具有什么类型:每个变量的类型必须在声明的时候指定。
  • C#1是安全的——除非存在真实的转换关系,否则不能把一个类型当作另一个类型使用。(在完全无关的结构之间进行强制类型转换,很容易造成严重的后果)
  • 静态类型不予许一个集合成为强类型的“字符串列表”或者“整数列表”,除非针对不同的元素使用大量重复代码:数组是强类型的,所以不可能将一个string[]的一个元素设置成一个FileStream,引用类型数组支持协变,只要元素类型之间允许转换。
  • 方法的覆盖和实现不允许协变性/逆变性。

“协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。

“逆变”则是指能够使用派生程度更小的类型。

只是有一点记住Dog 继承自Animal,

所以Dog变成Animal 就是和谐的变化(协变),而如果Animal 变成Dog就是不正常的变化(逆变)

三,值类型和引用类型

  • 对于引用类型的表达式(变量),它的值是一个引用,而非对象:
  • 引用就像URL——允许你访问真实数据的一小片数据。
  • 对于值类型的表达式,它的值是实际数据。
  • 引用类型的对象总是在堆上,值类型的值既可以在栈上也可能在堆上,具体取决于上下文:变量的值在它声明的位置存储,在一个类中有一个int类型的实例变量,那么这个int的值就和对象中其他数据在一起,也就是堆中。
  • 引用类型的值作为方法参数使用是,参数默认是以“值传递”——但值得本身是一个引用。
  • 值类型的值会在需要引用类型的行为的时候被装箱,反之,则拆箱:当一个值类型调用Tostring,Equals或GetHashCode方法时,如果该类型没有覆盖这些方法,也会发生装箱。尽量少用拆箱和装箱,当大量操作时,这会影响性能。

四,动态类型

dynamic d = "hello";//动态类型
Console.WriteLine(d.Length);
d = new string[] { "hi", "there" };
Console.WriteLine(d.Length);

 

 

 

 

转载于:https://www.cnblogs.com/Tan-sir/p/5169195.html

C#1所搭建的核心基础相关推荐

  1. C#复习笔记(2)--C#1所搭建的核心基础

    通过对C#1所搭建的核心基础的深入了解,可以知道之后的C#版本在C#1的基础上做了很多扩展,而这些扩展都是基于C#搭建的核心基础而来的. 委托 一.编写委托的过程 委托经常和C语言的"函数指 ...

  2. 【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI

    分布式框架通信核心基础 序列化 JDK 的序列化 JDK 序列化的一些细节 Protobuf 序列化 Protobuf 环境搭建与操作 Protobuf 原理分析 实际数据传输 序列化技术选型 远程过 ...

  3. 大数据技术之_23_Python核心基础学习_01_计算机基础知识 + Python 入门 (9.5小时)

    大数据技术之_23_Python核心基础学习_01 第一章 计算机基础知识 1.1 课程介绍 1.2 计算机是什么 1.3 计算机的组成 1.4 计算机的使用方式 1.5 windows 的命令行 1 ...

  4. 深入浅出Yolo系列之Yolov3amp;Yolov4核心基础知识完整讲解

    Datawhale干货 作者:知乎-江大白  编辑:AI算法与图像处理 本文来源:https://zhuanlan.zhihu.com/p/143747206 已授权转载,如需转载请联系原作者,禁止二 ...

  5. Yolov3Yolov4核心基础知识完整讲解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:江大白 知乎链接:https://zhuanlan.zhih ...

  6. 深入浅出Yolo系列之Yolov3Yolov4Yolov5核心基础知识完整讲解

    深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解

  7. mysql核心数据库_从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程...

    从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程 课程目录 (1) 01MySQL基础_课程引入.avi (2) 02MySQL基础_为什么学习 ...

  8. Java初学者需掌握的4大核心基础知识

    Java人才需求量一直是居高不下,Java一直霸主流行编程语言排行榜,这使得大家对学Java有前途,一致成赞同的态度,使得涌入Java行业的朋友是越来越多,只为谋个好前程.但由于Java语言没有这么强 ...

  9. JavaWeb第五讲 Web核心基础之HTTP协议

    Web核心基础之HTTP协议 HTTP简介 对客户端和服务器端之间数据传输的格式规范,格式简称为"超文本传输协议".HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件 ...

  10. python计算入门_Python入门教程02-01(计算机核心基础)

    python入门课程第二章-计算机核心基础 Python入门教程01-01(ATM+购物车)学习过后,我们需要了解一下计算机的核心基础,目标就是为了让后面更好的理解python这门语言,更容易接受后续 ...

最新文章

  1. 阿里达摩院:超大规模图神经网络系统将赋予机器常识
  2. 【土地评价与土地管理】教案 第一章:土地评价要素的选择
  3. MATLAB学习笔记(八)
  4. 从起始点到目标点的最短步数(BFS)
  5. Mac OS X:解决开机黑屏时间长(恢复秒开)
  6. 砸黑板! 正则表达式!!!re 模块
  7. yagmail发送带图片和链接的邮件
  8. Java widget xui_XUI使用总结
  9. 完美解决Chrome主页老是被毒霸网址大全篡改
  10. Wireshark从入门到精通(进阶篇)
  11. 根据列表id封装删除某条数据后刷新列表
  12. 202305读书笔记|《因思念而沉着》——任何赞美都是身外之物唯自由可随身携带
  13. 为何戴绿帽的总是悲催老实人?
  14. CK-GW06-E01网关与欧姆龙PLC配置指南
  15. Docker私服搭建
  16. #140-(EZOI练习)[进制转换]汽车牌照
  17. SAP FICO 财务成本知识(初)
  18. 30W pd快充方案PN8165+PN8307H兼容20W PD方案
  19. 美国高分辨率土地覆盖分类技术进展
  20. DB块中DBD与DBW、DBB以及DBX的区别

热门文章

  1. django高级之缓存与信号
  2. Spring Boot实现SAAS平台的基本思路
  3. 从源码分析非线程安全集合类的不安全迭代器
  4. [转]如何配置sql server2005允许远程连接
  5. Linux下环境搭建(一)——java、tomcat配置
  6. nRF52832 矩阵按键调试 同一列上的按键 任意两个按键 按下 检测不到低电平(电平拉不下来)...
  7. 记一次mysql故障恢复
  8. AngularJs + angular-ui-router + bootstrap 实现blog基础导航功能
  9. 计算机中的颜色VI——从色相值到纯色的快速计算
  10. 没有装Express版Sql Server 2005就不能用WebPart ?