C#是当前在.Net开发环境下一种十分易于使用的语言,这门语言上手容易,语法简单,那么接下来就展示一些学习这门语言中的笔记吧!本合集将要要学习的内容提炼为11天,本篇是第九天的内容,11天成为C#程序员,就是这么简单!
9 .Net学习第九天
9.1 里氏转换
子类可以赋值给父类
如果有一个地方需要一个父类对象作为参数,我们可以给一个子类对象代替
Student s = new Student();
Person p = s;
如果父类中装的是子类对象,那么可以将这个父类对象强转为子类对象
对于一个父类下的不同子类的对象,可以使用一个父类数组来存放这些子类对象
is类型转换,成功返回true,失败返回false
as类型转换,成功返回对应对象,失败返回null
9.2 集合
9.2.1 ArrayList
集合的特点:
集合的长度可以任意改变
集合的类型可以随意
ArrayList List = new ArrayList();
- List.Add添加单个元素
- List.AddRange添加集合元素
- List.Clear清空集合元素
- List.Remove删除单个元素
- List.RemoveAt删除指定位置元素
- List.RemoveRange删除指定下标区间的元素
- List.Sort升序排列
- List.Reverse反转
- List.Insert在指定位置插入指定元素
- List.InsertRange在指定位置插入一个集合
- List.Contains判断是否包含指定元素
ArrayList的长度可变,其Count属性表示集合实际包含的元素个数,Capacity属性表示集合可包含的元素个数,当Count属性高于Capacity属性时,集合就会向内存中多申请一倍的空间来保证集合的长度够用
9.2.2 Hashtable
键值对集合
Hashtable ht = new Hashtable();
ht.Add(键,值)
调用时,是根据下标的键找到集合中的值
使用foreach循环调用
foreach (var item in ht.Keys)
{
Console.WriteLine("键是{0},值是{1}", item, ht[item]);
}
9.2.3 泛型集合
List<int> list = new List<int>();
泛型集合提供的方法与ArrayList相同
但是泛型集合在实例化时就指定了该泛型集合的类型
在进行Add操作时,只能加入指定类型的元素,因此也不会发生装箱操作
9.2.4 Dictionary
键值弱集合
Dictionary<int, string> dic = new Dictionary<int, string>();
键值弱集合的使用方式与Hashtable相同,但是在建立集合时就指定了键与值的类型
KeyValuePair<int, string>
9.3 Path类
Path类是路径类,提供了一系列对文件路径操作的方式
- GetFileName获取文件名
- GetFileNameWithoutExtension获取不包含扩展名的文件名
- GetExtension获取文件的扩展名
- GetDirectorName获取文件所在文件夹的路径
- GetFullPath获得文件所在全路径
- ComBine将两个字符串组成一个路径
9.4 File类
操纵文件的类
- Create创建一个文件
- Delete删除一个文件
- Copy复制一个文件到另一个文件
- WriteAllBytes写入
- ReadAllBytes读取
- ReadAllLines返回字符串数组
- ReadAllText返回字符串
- WriteAllLines写入行以字符串数组形式写入每一行
- WriteAllText写入一个字符串
- AppendAllText追加写入一个字符串
9.5 FileStream类
FileStream 对象名 = new FileStream(文件路径, FileMode.操作方式);
FileStream fsRead = new FileStream(@"C:\Users\...", FileMode.OpenOrCreat);
byte[] buffer = new byte[1024*1024*5];
int r = fsRead.Read(buffer, 0, buffer.Length);
string s = Encoding.Default.GetString(buffer, 0, r);
fsRead.Close();
fsRead.Dispose();
Console.WriteLine(s);
Console.ReadKey();
在using中使用文件流可以帮助我们释放流所占用的资源
using(FileStream fsWrite = new FileStream(@"C:\Users\...", FileMode.Append))
{
string str = "123";
byte[] buffer = Encoding.Default.GetBytes(str);
fsWrite.Write(buffer, 0, buffer.Length);
}
Console.ReadKey();
9.6 多态
让一个对象能表现出多种状态
实现多态的手段
9.6.1 虚方法
使用关键字virtual将父类的方法标记为虚方法
这个函数可在子函数中方法用关键字override将同名方法标记作为重写方法
9.6.2 抽象类
当父类中的方法不知道如何实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法
使用关键字abstract将父类标记为抽象类
使用关键字abstract将父类中的方法标记为抽象方法,必须没有方法体和{}
使用关键字override在子类中重写这个方法
抽象类的注意事项
抽象成员必须标记为abstract
抽象成员必须在抽象类中
抽象类不能被实例化
子类继承抽象类后,必须把该父类的所有抽象对象重写
抽象成员的访问修饰符不能是private
抽象类是有构造函数的
如果父类的抽象方法有参数,那么子类在重写时必须传入参数
如果父类的抽方法有返回值,那么子类在重写时必须传回返回值
9.7 访问修饰符
public:公开的,能被所有成员访问的
private:私有的,只能被类内成员访问的
protected:受保护的,只能被类内成员以及子类访问的
internal:只能被当前程序集访问的
protected internal:
能够修饰类的访问修饰符:public、internal(子类的访问权限不能高于父类的访问权限)