泛型
default
由于泛型T不确定是值类型还是引用类型,所以T a = null
这句是错误的(值类型就空了)。
T a = default(null)
这样的话值类型就是0,引用类型就是null
yield
这个一般是yield return, yield break联合使用;如下
c#遍历属性
我今天想遍历一个类的属性,发现必须满足以下几点:
- 必须是属性,不能是成员。
- 必须是
public
满足以上后才能用循环到:
where约束
这个我不是很深,以后补充;先看段代码。
第一个类;where对T约束为引用类型(值类型可以用struct),这样调用<>
里面就只能是引用类型了
除此外where还约束为new(),表示<>
里的类型必须有默认的构造函数,这样才可以用new T()
这样的代码(测试发现里面不能加参数)
where还可以准确约束,有点像c++的模板特例化
协变和抗变
http://blog.csdn.net/sudazf/article/details/17148971
可空类型及运算符
可空类型原型是System.Nullable<T>
,简单型T?
网上说它是为了sql设计
操作符可以和原型相同
各个泛型容器及性能
队列Queue
栈Statck
链表LinkedList
有序列表SortedList
字典Dictionary
有序字典SortedDictionary
集 HashSet
有序集 SortedSet
书上本来是有个性能表,但是纠结了感觉没啥用,就不写等以后更新。
接口
|
|
暂时看它和虚基类没啥区别呀!!!!!!以后再加吧。
foreach的自定义
自定义类要使用foreach,就必须实现IEnumerator和IEnumerable
排序搜索等
本以为较简单的,看了下发现和其它还有关,就记录了。
两种:
IComparable在要比较的对象类中实现,可以比较该对象和另一对象
IComparer在一个单独的类中实现,可以比较任意俩个对象
|
|
其它接口
搜索
如同排序,搜索本身是Predicate继承,传入的话直接一个static函数就好了。
搜索可以返回数组字典
Dictionary,这个字典缺点就是添加的键值不能相同,同了就抛出异常。
所以每次add要判断是否存在,感觉好麻烦!
添加元素 AddRange(),IEnumerable
删除元素 RemoveAt,IEquatable
搜索元素 IndexOf、LastIndexOf()、FindIndex()、FindLastIndex()、Find()、FindLast(),IEquatable
排序元素 Sort()、Comparison