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 ...
随机推荐
- RabbitMQ-从基础到实战(1)— Hello RabbitMQ
转载请注明出处 1.简介 本篇博文介绍了在windows平台下安装RabbitMQ Server端,并用JAVA代码实现收发消息 2.安装RabbitMQ RabbitMQ是用Erlang开发的,所以 ...
- (102, "Incorrect syntax near '-'.DB-Lib error message 102, severity 15:\nGen
python 调用MSSQL存储过程,运行时报错 sql="exec spname %s,%s"%(param1,param2) 这是错误的调用存储过程的语句,param1和par ...
- System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt".
昨天遇到一个比较奇怪的问题,运行VS2010调试程序的时候,总是会报一个错,然后程序就挂掉了:无可用源….,弹出一个窗口提示:System.AccessViolationException: Atte ...
- Kruskal算法的实现
#include "stdio.h" #include "stdlib.h" struct edge { int m; int n; int d; }a[]; ...
- 任务一:零基础HTML编码练习
任务目的 了解HTML的定义.概念.发展简史 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 任务描述:完成一个HTML页面代 ...
- PAT乙级练习1001
1001. 害死人不偿命的(3n+1)猜想 (15) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去, ...
- TCP/IP、HTTP、Socke、UDP的区别
一.TCP/IP.Http.Socket的区别 [http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html](http://jing ...
- Shell第三篇:基本语法
一 什么是shell script 将OS命令堆积到可执行的文件里,由上至下的顺序执行文本里的OS命令 就是脚本了. 再加上些智能(条件/流控)控制,就变成了智能化脚本了. 二 变量 part1 为何 ...
- Debian 8开启sftp服务
看到某云的CDN居然是使用ftp这种早该淘汰的协议,不禁有些吐槽.ftp曾经作为互联网上最重要的协议,但漫长使用过程中体现出的各种缺点,已不适合再使用.其中最致命的问题就是明文传输用户密码.建议使用这 ...
- java 基础知识五 数组
java 基础知识五 数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...