一,委托

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

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);
 

 

 

 

 

C#1所搭建的核心基础的更多相关文章

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

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

  2. c#1所搭建的核心基础之值类型和引用类型

    这个主题很重要,在.NET中做的一切其实都是在和一个值类型或者引用类型打交道. 现实世界中的值和引用 假定你在读一份非常棒的东西,希望一个朋友也去读他.于是你到复印室里复印了一份.这个时候他获得了属于 ...

  3. c#1所搭建的核心基础之类型系统的特征

    类型系统的特征简介 几乎每种编程语言都有某种形式的一个类型系统.类型系统大致被分为:强/弱,安全/不安全,静态/动态,显式/隐式等类型. c#在类型系统世界中的位置 c#1的类型系统是静态的.显式的和 ...

  4. c#1所搭建的核心基础之委托

    本文将对c#1的委托进行详细探索 委托(delegate)   注 delegate:vt.委派代表; 授权给; [法律]债务转移;  委托作用:在恰当的时间执行一系列操作 1.简单委托的构成 声明委 ...

  5. Androd核心基础01

    Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...

  6. css核心基础总结篇

    今日这篇是整合前面的css补充知识的. 我觉得前面的关于css的知识补充进去有点乱,今日整理整理一下. 层叠样式表 层叠是什么意思?为什么这个词如此重要,以至于要出现在它的名称里. 层叠可以简单地理解 ...

  7. Android应用的核心基础

    Android4开发入门经典 之 第二部分:Android应用的核心基础 Android应用中的组件 Application Components Android应用中最主要的组件是: 1:Activ ...

  8. C#核心基础--类(2)

    C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...

  9. (1) css的核心基础

     css的核心基础 1.css的基本语法在具体使用css之前,请各位兄弟姐妹先思考一个生活中的问题,一般情况下我们是如何描述一个人的呢? 小明{ 民族:汉族: 性格:温柔: 性别:男: 体重:68kg ...

随机推荐

  1. mybatis对java自定义注解的使用——入门篇

    最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的mybatis,在其使用过程中,不加思索的用了比较原始的一种持久化方式: 在一个包中写一个DAO的接口,在另一个包里面 ...

  2. idea调试SpringMvc, 出现:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener错误的解决办法

    有时,使用idea开发SpringMvc发现调试时出现以下错误: 12-Mar-2017 12:08:02.345 严重 [RMI TCP Connection(2)-127.0.0.1] org.a ...

  3. LBPL--基于Asp.net、 quartz.net 快速开发定时服务的插件化项目

    LBPL 这一个基于Asp.net. quartz.net 快速开发定时服务的插件化项目 由于在实际项目开发中需要做定时服务的操作,大体上可以理解为:需要动态化监控定时任务的调度系统. 为了实现快速开 ...

  4. MongoDB一般安装

    MongoDB一般安装 1.首先到官网(http://www.mongodb.org/downloads )下载合适的安装包,目前的最新版本为2.6 安装包有zip和msi格式的,这里推荐下载zip格 ...

  5. 20. Valid Parentheses - 括号匹配验证

    Description: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determin ...

  6. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  7. SQL Server 备份所有数据库代码

    今天让我备份一下网上所有数据库,猛地一看,几百个呢, 坑爹呢,只好网上找找有没有简便的,没想到还真有 记下来,以后好用,哈哈... use master declare @DbName varchar ...

  8. js正则表达test、exec和match的区别

    test的用法和exec一致,只不过返回值是 true false. 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用. 最近开发遇到一些 ...

  9. centos 6.5 搭建JSP运行环境

    一.安装nginx yum install nginx #安装nginx,根据提示,输入Y安装即可成功安装 service nginx start #启动 chkconfig nginx on #设为 ...

  10. ES6 Promise 状态解惑

    Promise的概念在ES6标准推出来之前已经深入人心,很多框架和第三方库都有类似的实现.但在深入理解ES6的Promise对象的时候,受之前经验的影响,很多概念给人似是而非的感觉,其中有一个特别明显 ...