C# 面向对象系列笔记(四)
第四天
1.泛型集合
1>ArrayList--->List<T> 集合
-àlist.Add() //添加数据
-àlist.AddRange(new int[]{1,2,3,4,5,7,8,9});//添加集合数据
-àlist.Chera(); //清除所有数据
-àlist.Reverse(); //翻转;
-àlist.Sort(); //升序排列
-àIist.Insert(0,100); //根据索引添加数据
-àlist.Insert(0,new int[]{1,2,3,4,5.67});
-àlist.Remove(100); //写谁 谁删除
-àlist.RemoveAt(5); //根据索引删除
-àlist.RemoveRange(1,10); //删除一段;1,开始索引,10: 移除的范围
-àlist.RemoveAll(n=>n>3); //lamda表达式
2>Hashtable--->Dictionary<Tkey,Tvalue> 键值对集合
遍历方式:
// 循环输出键值对集合
foreach (var item in dic.Keys)
{
Console.WriteLine("键{0}----值{1}",item,dic[item]);
}
//更加洋气的遍历方式
foreach (KeyValuePair<string, int> kvp in dic)
{
Console.WriteLine("键{0}---值{1}", kvp.Key, kvp.Value);
}
2.File读写数据(上接昨天讲的File)
1> ReadAllBytes(): 以字节的形式读取文件
eg:
byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\0310.Net基础班第十二天.txt");
//字节数组---->字符串 GetString() ToString()
//32 45 67 32 45 67 我爱你解码
string str = Encoding.Default.GetString(buffer);
Console.WriteLine(str);
2> WriteAllBytes() 以字节的方式写入
eg:
string str = "顶楼上 ";
//字符串--->转码字节数组
byte[] buffer= Encoding.Default.GetBytes(str);
File.WriteAllBytes(@"C:\Users\SpringRain\Desktop\123.txt", buffer);
Console.WriteLine("写入成功");
3> 对多媒体文件实现复制粘贴的操作(File复制粘贴是一次性全部复制/粘贴,太消耗内存,以后可以用 数据流的方法)
eg:
//首先使用ReadAllBytes将要复制的文件读取出来
byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\newnew.mp4");
//使用WriteAllBytes将字节数组写入到指定的位置 File.WriteAllBytes(@"C:\Users\SpringRain\Desktop\new22222.mp4", buffer);
Console.WriteLine("复制成功");
4> ReadAllLines() WritrAllLines() //读入或写入每行数据,返回一个数组类型
eg:
string[] contents = File.ReadAllLines(@"C:\Users\SpringRain\Desktop\0310.Net基础班第十二天.txt", Encoding.Default); //读
File.WriteAllLines(@"C:\Users\SpringRain\Desktop\new222.txt", newstring[] { "张三", "李四", "王五", "赵六" });
Console.WriteLine("写入成功"); //写
5> ReadAllText() WriteAllText() //读入或写入整个文档,返回字符串类型
eg:
string content = File.ReadAllText(@"C:\Users\SpringRain\Desktop\new222.txt"); //读
Console.WriteLine(content);
File.WriteAllText(@"C:\Users\SpringRain\Desktop\new222.txt", "覆盖你们"); //写
Console.WriteLine("写入成功");
3.Directory类 (操作文件夹的类)
1> Directory.Exists():查询文件夹是否存在
2> Directory.CreateDirectory() :创建了一个文件夹
eg:
if (!Directory.Exists(@"C:\Users\SpringRain\Desktop\new"))
{
//如果没有我就创建一个
Directory.CreateDirectory(@"C:\Users\SpringRain\Desktop\new");
Console.WriteLine("创建成功");
}
else
{
//如果有了我就往里面追加100个文件夹
for (int i = 0; i < 100; i++)
{
Directory.CreateDirectory(@"C:\Users\SpringRain\Desktop\new\" + i);
}
Console.WriteLine("追加成功");
}
3> Directory.Delete() //删除文件夹
eg:
Directory.Delete(@"C:\Users\SpringRain\Desktop\new", true);
Console.WriteLine("文件夹删除成功");
Console.ReadKey();
4> Directory.Move() //剪切文件夹(不能越盘剪切)
eg:
Directory.Move(@"D:\新来哒", @"D:\1111111111111\newnewnew");
Console.WriteLine("剪切成功");
5> Directory.GetFiles() //返回文件夹里文件指定类型绝对路径
4 .多态 (里包含:虚方法,抽象类,接口)
1> 定义:我们使用多态的目的就是为了让一个对象能够表现出多种状态(类型)
2> 使用虚方法实现多态:
---将父类的函数名称,使用关键字virtual进行标记
---将子类的每个函数一次标记为override,表示重写父类的虚函数;
---如果没有virtual和override,那么父类无论如何都不会去执行子类的函数
---如果我们将父类的函数标记为virtual,那么意味着这个函数可以被子类重写一遍,如果父类装的是子类的对象,则执行子类中重写父类的函数
---ToString()就是object类中的一个虚方法。
5. 抽象类
1> 抽象成员必须标记为abstract,并且不能有任何方法来实现;
2> 抽象成员必须在抽象类中。
3> 抽象类不能被实例化
4> 子类继承抽象类后,必须把父类中的所有抽象成员都重写(除非子类也是一个抽象类,则可以不重写)
5> 抽象类的访问修饰符不能是private
6> 在抽象类中可以包含实实例程成员,并且抽象类中的实例成员可以不被子类实现
7> 抽象类是有构造函数的,虽然不能被实例化。(为子类提供继承)
8> 如果父类的抽象方法中有参数,那么,继承这个抽象类的子类在重写父类的方法时候必须传入对应的参数。
9> 如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候,也必须传入返回值
注意 :
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑讲父类定义成一个普通类,用虚方法来实现多态
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类
第四天
1.泛型集合
1>ArrayList--->List<T> 集合
-àlist.Add() //添加数据
-àlist.AddRange(new int[]{1,2,3,4,5,7,8,9});//添加集合数据
-àlist.Chera(); //清除所有数据
-àlist.Reverse(); //翻转;
-àlist.Sort(); //升序排列
-àIist.Insert(0,100); //根据索引添加数据
-àlist.Insert(0,new int[]{1,2,3,4,5.67});
-àlist.Remove(100); //写谁 谁删除
-àlist.RemoveAt(5); //根据索引删除
-àlist.RemoveRange(1,10); //删除一段;1,开始索引,10: 移除的范围
-àlist.RemoveAll(n=>n>3); //lamda表达式
2>Hashtable--->Dictionary<Tkey,Tvalue> 键值对集合
遍历方式:
// 循环输出键值对集合
foreach (var item in dic.Keys)
{
Console.WriteLine("键{0}----值{1}",item,dic[item]);
}
//更加洋气的遍历方式
foreach (KeyValuePair<string, int> kvp in dic)
{
Console.WriteLine("键{0}---值{1}", kvp.Key, kvp.Value);
}
2.File读写数据(上接昨天讲的File)
1> ReadAllBytes(): 以字节的形式读取文件
eg:
byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\0310.Net基础班第十二天.txt");
//字节数组---->字符串 GetString() ToString()
//32 45 67 32 45 67 我爱你解码
string str = Encoding.Default.GetString(buffer);
Console.WriteLine(str);
2> WriteAllBytes() 以字节的方式写入
eg:
string str = "顶楼上 ";
//字符串--->转码字节数组
byte[] buffer= Encoding.Default.GetBytes(str);
File.WriteAllBytes(@"C:\Users\SpringRain\Desktop\123.txt", buffer);
Console.WriteLine("写入成功");
3> 对多媒体文件实现复制粘贴的操作(File复制粘贴是一次性全部复制/粘贴,太消耗内存,以后可以用 数据流的方法)
eg:
//首先使用ReadAllBytes将要复制的文件读取出来
byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\newnew.mp4");
//使用WriteAllBytes将字节数组写入到指定的位置 File.WriteAllBytes(@"C:\Users\SpringRain\Desktop\new22222.mp4", buffer);
Console.WriteLine("复制成功");
4> ReadAllLines() WritrAllLines() //读入或写入每行数据,返回一个数组类型
eg:
string[] contents = File.ReadAllLines(@"C:\Users\SpringRain\Desktop\0310.Net基础班第十二天.txt", Encoding.Default); //读
File.WriteAllLines(@"C:\Users\SpringRain\Desktop\new222.txt", newstring[] { "张三", "李四", "王五", "赵六" });
Console.WriteLine("写入成功"); //写
5> ReadAllText() WriteAllText() //读入或写入整个文档,返回字符串类型
eg:
string content = File.ReadAllText(@"C:\Users\SpringRain\Desktop\new222.txt"); //读
Console.WriteLine(content);
File.WriteAllText(@"C:\Users\SpringRain\Desktop\new222.txt", "覆盖你们"); //写
Console.WriteLine("写入成功");
3.Directory类 (操作文件夹的类)
1> Directory.Exists():查询文件夹是否存在
2> Directory.CreateDirectory() :创建了一个文件夹
eg:
if (!Directory.Exists(@"C:\Users\SpringRain\Desktop\new"))
{
//如果没有我就创建一个
Directory.CreateDirectory(@"C:\Users\SpringRain\Desktop\new");
Console.WriteLine("创建成功");
}
else
{
//如果有了我就往里面追加100个文件夹
for (int i = 0; i < 100; i++)
{
Directory.CreateDirectory(@"C:\Users\SpringRain\Desktop\new\" + i);
}
Console.WriteLine("追加成功");
}
3> Directory.Delete() //删除文件夹
eg:
Directory.Delete(@"C:\Users\SpringRain\Desktop\new", true);
Console.WriteLine("文件夹删除成功");
Console.ReadKey();
4> Directory.Move() //剪切文件夹(不能越盘剪切)
eg:
Directory.Move(@"D:\新来哒", @"D:\1111111111111\newnewnew");
Console.WriteLine("剪切成功");
5> Directory.GetFiles() //返回文件夹里文件指定类型绝对路径
4 .多态 (里包含:虚方法,抽象类,接口)
1> 定义:我们使用多态的目的就是为了让一个对象能够表现出多种状态(类型)
2> 使用虚方法实现多态:
---将父类的函数名称,使用关键字virtual进行标记
---将子类的每个函数一次标记为override,表示重写父类的虚函数;
---如果没有virtual和override,那么父类无论如何都不会去执行子类的函数
---如果我们将父类的函数标记为virtual,那么意味着这个函数可以被子类重写一遍,如果父类装的是子类的对象,则执行子类中重写父类的函数
---ToString()就是object类中的一个虚方法。
5. 抽象类
1> 抽象成员必须标记为abstract,并且不能有任何方法来实现;
2> 抽象成员必须在抽象类中。
3> 抽象类不能被实例化
4> 子类继承抽象类后,必须把父类中的所有抽象成员都重写(除非子类也是一个抽象类,则可以不重写)
5> 抽象类的访问修饰符不能是private
6> 在抽象类中可以包含实实例程成员,并且抽象类中的实例成员可以不被子类实现
7> 抽象类是有构造函数的,虽然不能被实例化。(为子类提供继承)
8> 如果父类的抽象方法中有参数,那么,继承这个抽象类的子类在重写父类的方法时候必须传入对应的参数。
9> 如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候,也必须传入返回值
注意 :
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑讲父类定义成一个普通类,用虚方法来实现多态
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类