C#1所搭建的核心基础
一,委托
- 委托封装了包含特殊返回类型和一组参数的行为,类似包含单一方法接口。
- 委托类型声明中所描述的类型签名决定了哪个方法可以用于创建委托实例,同时决定了调用的签名:委托类型实际上只是参数类型的一个列表以及一个返回类型
- 创建委托实例,需要一个方法已经调用该方法的目标:
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所搭建的核心基础的更多相关文章
- C#复习笔记(2)--C#1所搭建的核心基础
通过对C#1所搭建的核心基础的深入了解,可以知道之后的C#版本在C#1的基础上做了很多扩展,而这些扩展都是基于C#搭建的核心基础而来的. 委托 一.编写委托的过程 委托经常和C语言的“函数指针”挂钩. ...
- c#1所搭建的核心基础之值类型和引用类型
这个主题很重要,在.NET中做的一切其实都是在和一个值类型或者引用类型打交道. 现实世界中的值和引用 假定你在读一份非常棒的东西,希望一个朋友也去读他.于是你到复印室里复印了一份.这个时候他获得了属于 ...
- c#1所搭建的核心基础之类型系统的特征
类型系统的特征简介 几乎每种编程语言都有某种形式的一个类型系统.类型系统大致被分为:强/弱,安全/不安全,静态/动态,显式/隐式等类型. c#在类型系统世界中的位置 c#1的类型系统是静态的.显式的和 ...
- c#1所搭建的核心基础之委托
本文将对c#1的委托进行详细探索 委托(delegate) 注 delegate:vt.委派代表; 授权给; [法律]债务转移; 委托作用:在恰当的时间执行一系列操作 1.简单委托的构成 声明委 ...
- Androd核心基础01
Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...
- css核心基础总结篇
今日这篇是整合前面的css补充知识的. 我觉得前面的关于css的知识补充进去有点乱,今日整理整理一下. 层叠样式表 层叠是什么意思?为什么这个词如此重要,以至于要出现在它的名称里. 层叠可以简单地理解 ...
- Android应用的核心基础
Android4开发入门经典 之 第二部分:Android应用的核心基础 Android应用中的组件 Application Components Android应用中最主要的组件是: 1:Activ ...
- C#核心基础--类(2)
C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...
- (1) css的核心基础
css的核心基础 1.css的基本语法在具体使用css之前,请各位兄弟姐妹先思考一个生活中的问题,一般情况下我们是如何描述一个人的呢? 小明{ 民族:汉族: 性格:温柔: 性别:男: 体重:68kg ...
随机推荐
- Winform自定义控件在界面上拖动、滚动鼠标。。会闪烁的解决方法
环境说明: 项目中有一个基类窗体BaseForm,有一个自定义控件TextBoxBase,两个控件都做了一些独特常规的封装和重写,在TextBoxBase中有一点重绘的下划线,发现在窗体运行之后, ...
- 用ListView实现对数据库的内容显示
用ListView实现对数据库的内容显示 创建一个触发机制 ---------(作用)将数据读入ArrayList集合中 MyBase base = new MyBase(); SQLiteDatab ...
- ASP.NET Core MVC之ViewComponents(视图组件)
前言 大概一个来星期未更新博客了,久违了各位,关于SQL Server性能优化会和ASP.NET Core MVC穿插来讲,如果你希望我分享哪些内容可以在评论下方提出来,我会筛选并看看技术文档来对你的 ...
- cstring头文件函数解析
原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5643829.html 在使用由字符数组或指针组成的字符串的时候,要用到一些函数,这些函数通常包含在 ...
- TIME_WAIT 另一种解决方式 SO_LINGER
被TIME_WAIT问题烦得不行,又发现了另一种解决方式,SO_LINGER. 对SO_LINGER解释最通用的自然是<UNP>,现摘录如下 SO_LINGE ...
- Webstorm编译TypeScript报错
Accessors are only available when targeting ECMAscript 5 and higher. 解决办法: File Watchers 在tsc.cmd命令上 ...
- node.js平台下,利用cookie实现记住密码登陆(Express+Ejs+Mysql)
本博文需有node.js+express+mysql入门基础,若基础薄弱,可参考博主的其他几篇node.就是博文: 1.下载Mysql数据库,安装并配置 创建用户表供登录使用: 2.node.js平台 ...
- git 入门宝典
本篇教程是按照我自己的组织方式,然后从多篇教程中拼凑出来的,嘎嘎~,真佩服自己的技术! 原本想叫 git 宝典的,结果一查git的命令大全,还有那么多的git命令与功能没有接触到,所以...还是谦虚一 ...
- Oracle子查询中any、some、all之间的区别
用some,any和all对子查询中返回的多行结果进行处理. 下面我们来简单介一下这几个关键词的含义. * Some在此表示满足其中一个的意义,是用or串起来的比较从句. * Any也表示满足其中一个 ...
- [转]使用sklearn进行集成学习——实践
转:http://www.cnblogs.com/jasonfreak/p/5720137.html 目录 1 Random Forest和Gradient Tree Boosting参数详解2 如何 ...