自定义泛型:
目的是为了代码重用<算法重用>。
list<T> mylist=new list<T>();
T:type parameters T实际上就是占位符。可以说是类型参数
在net2.0的时候才开始引入。
动手写泛型类。泛型方法。。写一个自己的list
泛型接口
实现泛型接有两种方式
封闭类型 class myclass:itest<string>
开放类型 class myclass<t>:itest<t>
泛型方法
public void sayHi<T>(T msg){}
类本身不是泛型的。只有调用的时候要指定一下。
泛型约束:
public class person<t,t1,c,tk,tv>where t1:struct
where t1:sturct 表示约速束类型t1是值类型
where t:class 表示约束t必须是引用类型
where c:new();表示要无参数的构造方法
[要求:构造函数不能是私有的。类型不能是抽象的。]
where tk:car 表示约束了TK类型。必须是car类型或者是car类型的子类
where tu:t 表示约束tu必须是t的子类.
装箱及拆箱: box.unbox
装箱:将值类型转换为引用类型的过程
拆箱:将引用类型转换为值类型的过程
值类型跟引用类型的关系。。
由于字符串类型与int类型在内存上根本不存在交集。根本无法发生类型转换。而object与int 则可以转换。因为任何类都是继承自object
注意:
装箱的时候。使用什么类型来装箱。拆箱的时候也应该用对应的类型的拆箱
由于int32是结构。结构是值类型。
由于int32还实现了icmparable 接口但接口是引用类型
使用了泛型集合后省去了装箱与拆箱的
操作。性能大大提升了。
使用arraylist。每次增加一个数字都会发生装箱与拆箱。性能比较低。
foreach:
为什么有些类可以使用foreach遍历?
任何类型只要想使用foreacg来循环遍历。就必须在当前类型中实现ienumerable接口来创建getenumerable()方法,通过这个方法就可以得到一个枚举器。。
getenumerable()方法的作用不是用来遍历的。而用来获取一个对象。这个对象才是用来遍历的。返回值是enuumerator
文件操作:
path类:
类中的方法基本是对字符串的操作。 与实际文本没有关系.
string GetDirectoryName(string path) (*)
得到文件的路径名。Path.GetDirectoryName(@"c:\temp\a.jpg")
string GetExtension(string path) 得到文件的扩展名
string GetFileName(string path) 得到文件路径的文件名部分
string GetFileNameWithoutExtension(string path) 得到去除扩展名的文件名
string GetFullPath(string path) 得到文件的全路径。可以根据相对路径获得绝对路径。
string GetTempFileName() 得到一个唯一的临时文件名(*)
string GetTempPath() 得到临时文件夹的路径(*)
direatory静态类:
主要是对文件的操作。。