博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C#]C#学习笔记-接口,集合与泛型
阅读量:6481 次
发布时间:2019-06-23

本文共 1677 字,大约阅读时间需要 5 分钟。

C#学习笔记-接口,集合与泛型

罗朝辉()

《C#与.NET高级程序设计》读书笔记

 

接口

1, 接口可以被定义为抽T象成员T的集合。接口可以包含方法,属性,事件以及索引器。实现接口是一个要么全要要么全不要的问题,不能部分实现接口的方法。

2,使用 as 关键字获取接口应用。

Person p = new Person("LiLai"); IStudent s = p as IStudent; if (s != NULL)     Console.WriteLine("{0} is a student", p.Name); else     Console.WriteLine("{0} is not a student", p.Name);

我们也可以使用 is 来判断一个对象是否实现了某个接口:

if (p is IStudent)     .... else     ...

3,接口可以如同对象一样被当做参数,返回值使用。

4,通过显式接口实现,解决实现多个接口的同名方法引起的命名冲突。显式实现的成员是自动私有的,所以使用这些成员的时候必须将对象显式转换为对应的接口。

5,接口支持继承,并支持多重继承。

6,枚举对象的构建   

如果自定义类型要和C#的foreach关键字一起使用的话,容器就需要定义一个名为GetEnumerator()的方法,它由IEnumerator接口类型来定制。通常这个方法的实现只是交给保存子对象的内部成员,然而,我们也可以使用yield return语法来提供多个“命名迭代器” 方法。 

7,回调接口

回调接口通常不会由对获取事件感兴趣的对象直接实现,而是由一个叫做接收器对象的辅助对象来实现。事件的发送者会在合适的情况下调用接收器。 回调接口很有点像ObjC中的 delegate。

 

集合和泛型

1,最基础的容器就是 System.Array,然而我们不能在增加或删除元素时自动调整Array的大小。我们可以利用定义在System.Collections命名空间中的接口ICollection,IComparer,IDictionary,IDictionaryEnumerator,IEnumerable,IEnumerator,IHashCodeProvider,IList等来实现更灵活的容器,或使用System.Collections.Generic命名空间的泛型容器类型Collection<T>,Comparer<T>, Dictionary<TKey, TValue>, List<T>, Queue<T>, SortedDictionary<T>, Stack<T>, LinkedList<T>, ReadOnlyCollection<T>等。

2,装箱和撤箱

.NET平台支持两大类的数据类型:值类型和引用类型。简单来说,装箱就是把值类型转换为引用类型,反之就是撤箱。具体点说:装箱就是把变量保存在System.Object中,将值类型显示转换为相应的引用类型;而撤箱就是把保存在对象引用中的值转换回栈上的相应值类型。撤箱必须回到合适的数据类型,否则会引发InvalidCastException异常。

装箱和撤箱能方便我们往容器中存取值类型,但是也是有成本的,因为装箱需要创建新对象,撤箱时需要销毁对象,而且强制转换也可能引起类型安全问题。因此我们常用泛型容器来解决此类问题。

3,C#中泛型基本使用与C++相同。C#泛型中引进了 default 关键字,以用于设置类型参数的默认值,数值的默认值为0,引用类型的默认值为null,一个结构的字段被设为0或null。

4,C#中使用 where 关键字来约束类型参数,where 可以用来控制类型参数的各种特性,但目前还不支持运算符约束。

5,泛型类可以作为其他类的基类,它可以定义许多虚方法或抽象方法,但对泛型类的派生类有一些限制:派生类必须指定一个类型参数,如果基类定义了泛型虚方法或抽象方法,派生类型必须使用指定类型参数重写泛型方法。

转载地址:http://hofuo.baihongyu.com/

你可能感兴趣的文章
学习iOS【3】数组、词典和集合
查看>>
Hessian 原理分析--转
查看>>
转: 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端
查看>>
easyui传入map的数据前台展示出tree格式数据
查看>>
悲观的思考,乐观的生活.我们既需要思考的深度,也需要生活的温度!
查看>>
java.math.BigDecimal
查看>>
Vitamio中文API文档(4)—— VitamioInstaller
查看>>
yii框架常用url地址
查看>>
python3.4学习笔记(十六) windows下面安装easy_install和pip教程
查看>>
MyGUI 解析
查看>>
Linux中的ls命令详细使用
查看>>
graph-tool文档(一)- 快速开始使用Graph-tool - 2.属性映射、图的IO和Price网络
查看>>
GraphicsLab Project之辉光(Glare,Glow)效果 【转】
查看>>
<转>Python: __init__.py 用法
查看>>
Linux Curl命令
查看>>
-27979 LoadRunner 错误27979 找不到请求表单 Action.c(73): Error -27979: Requested form not found...
查看>>
[LeetCode] Minimum Depth of Binary Tree
查看>>
,net运行框架
查看>>
Java 中 Emoji 的正则表达式
查看>>
Mixin Network第一届开发者大赛作品介绍- dodice, diceos和Fox.one luckycoin
查看>>