C# IN Depth 第二章 C#1所搭建的核心基础

委托

简单委托的构成

让委托做事,条件:

    1.声明委托类型

    2.必须有一个方法包含了要执行的代码

    3.必须创建一个委托实例

   4.必须调用委托

委托类型:定义了一种委托类型,参数列表和返回值。delegate void StringProcessor(string input);

委托实例:通过委托类型创建的实例。

StringProcessor proc1,proc2;
proc1 = new StringProcessor(PrintString);
InstanceMethod instanceMethod = new InstanceMethod();
proc2 = new StringProcessor(instanceMethod.PrintObject);

如果操作是静态方法,指定类型名称就可以了。如果是实例方法,就需要先创建类型的一个实例

委托方法:和委托类型签名匹配的方法。在C#1中参数类型必须完全一致,C#2改善了这种状况

调用:Invoke,如果委托有参数,则需要传入参数。不写Invoke直接调用也可以,编译器可以理解

多播委托:

可以将多个委托方法赋值给一个委托实例,如果其中一个实例抛出了异常,那么会立即停止运行后续的委托方法

委托和事件可以看做是2个东西

可以将事件看成是属性,属性有get和set方法,事件也有add和remove方法,或者说只有这2中方法。在类的外部我们只能调用者2中方法,但是在类的内部我们可以有其他的操作,这正是我们想要的。


系统类型的特征

C#是静态类型的:每个变量都有一个特定的类型,在编译时就是已知的。

C#123是完全静态类型的,C#4引入了dynamic类型,是C#具有了动态类型的特征,但是大部分代码还是静态类型的

显示类型和隐式类型只有在静态类型的语言中才有意义。

显示类型表明在申明一个变量时需要指定它的类型

隐式类型表明让编译器自行推倒变量的类型

C# 1不支持隐式类型,只支持显示类型

C#1 方法覆盖和接口实现不允许协变和逆变

值类型和引用类型:

1.数组是引用类型,不管里面的元素是什么类型

2.枚举是值类型

3.委托是引用类型

4.接口是引用类型,但可由值类型实现

无论是引用传递还是值传递,永远不会传递对象本身。理解:引用传递传递的是一个引用,而不是本身,这个引用最后通过传值的方式传递给了别的方法。而值传递也没有传递值本身,而是通过拷贝一份的方法来传递。

装箱行为有时候是隐式的,在我们需要一个值类型的引用时,会自动的发生装箱行为。

新特性

与委托有关:

泛型(泛型委托类型)—— C# 2

创建委托实例时使用的表达式 —— C# 2

匿名方法 —— C# 2

委托协变和逆变 —— C# 2

Lambda表达式 —— C# 3

与类型系统有关:

泛型 —— C# 2

受限的委托协变逆变 —— C# 2

匿名类型 —— C# 3

隐式类型 —— C# 3

扩展方法 —— C# 3

受限的泛型协变逆变 —— C# 4

动态类型 —— C# 4

与值类型有关:

加入了List<T>

添加了int?特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值