一、对前面部份的总结
using System.Collections;
using System.IO;
using System.Text;
namespace _074_复习
{
class Program
{
static void Main(string[] args)
{
/*里氏转换
* 1)、子类可以赋值给父类(如果有一个方法需要一个父类作为参数,我们可以传第一个子类对象
* 2)、如果父类装的是子类对象,则可以将这个父类强转换成子类
*/
//person p = new student();
//student s = p as student;//将p转成student
//s.studentSayHello();
//if( p is student)
//{
// ((student)p).studentSayHello();
//}
//else
//{
// Console.WriteLine("转换失败!");
//}
//ArrayList list = new ArrayList();
//list.Add(1);
//Hashtable hashtable = new Hashtable();
//hashtable.Add(1, 2);
//在键值对集合中,键必须是唯一的
//hashtable[1] = 3;
//hashtable.containsKey看这个集合中是否含有这个键
//foreach(var item in hashtable)
//{
// Console.WriteLine("{0}-----------{1}", item, hashtable[item]);
//}
//byte[] buffer = File.ReadAllBytes(@"C:\Users\叶靖\Desktop\1.txt");
//将字节数组中的每一个元素都要按照我们指定的编码格式解析成字符串
//UTF-8 GB2312 GBK ASCII Unicode
// string s = Encoding.Default.GetString(buffer);
// Console.WriteLine(s);
//没有这个文件会给你创建这个文件,如果有就覆盖掉这个文件
string str = "今天天气很好,阳光很大";
byte[] buffer = Encoding.Default.GetBytes(str);
File.WriteAllBytes(@"C:\Users\叶靖\Desktop\1.txt", buffer);
Console.WriteLine("导入成功");
Console.ReadKey();
}
}
public class person
{
public void personSayHello()
{
Console.WriteLine("我是人");
}
}
public class student:person
{
public void studentSayHello()
{
Console.WriteLine("我是学生");
}
}
}
二、File类
当你读取的文件是多媒体文件,音乐文件,图片文件时使用ReadAllbytes
byte[] buffer = File.ReadAllBytes(@"C:\Users\叶靖\Desktop\1.txt");
//将字节数组中的每一个元素都要按照我们指定的编码格式解析成字符串
UTF-8 GB2312 GBK ASCII Unicode
string s = Encoding.Default.GetString(buffer);
Console.WriteLine(s);
当你读取的时字符串文件的时候可以使用ReadAllLines和ReadAllText
//以行的形式读取,返回的是string类型的数组
string[] str = File.ReadAllLines(@"C:\Users\叶靖\Desktop\1.txt", Encoding.Default);//Encoding.Default指定编码格式
foreach (string item in str)
{
Console.WriteLine(item);
}
Console.ReadKey();
string contents = File.ReadAllText(@"C:\Users\叶靖\Desktop\1.txt",Encoding.Default);
Console.WriteLine(contents);
ReadAllLines返回的是数组 ,可以精确到操作文本文件的每一行数据
ReadAllText返回的是字符串数据
修改数据
File.WriteAllLines(@"C:\Users\叶靖\Desktop\1.txt", new string[] {
"aoe", "ewu" });
Console.WriteLine("OK");
Console.ReadKey();
File.WriteAllText(@"C:\Users\叶靖\Desktop\1.txt", "古桑,家乡的樱花开了");
Console.WriteLine("OK");
Console.ReadKey();
这里的WriteAllLines和WriteAllText是覆盖文本写入
File.AppendAllText(@"C:\Users\叶靖\Desktop\1.txt", "该回去了");
Console.WriteLine("OK");
Console.ReadKey();
ApendAllTest是在文本后添加;当你使用时你不知道如何添加的时候就将鼠标放置在ApendAlltest上,他将会显示要补充的类型。
注意:file只能读取小文件,因为它是读取全部内容,所以占的内存大。所以一般的大文件建议使用字节流形式读取
三、绝对路径和相对路径
绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件。
相对路径:文件相对于应用程序的路径
结论:
我们在开发中应该去尽量的使用相对路径(因为在编程的时候你将文代码传给别人,使用的是绝对路径,文件可能位置发生改变)
四、list泛型集合
//创建List泛型集合
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.AddRange(new int[] {
1, 2, 3 });
list.AddRange(list);
for(int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
List泛型集合可以转换为数组
int[] nums = list.ToArray();//将集合转数组
List<string> list2 = new List<string>();将数组转集合
string[] list3 = list2.ToArray();
char[] chs = new char[] {
'c','a','b' };
List<char> listchar =chs.ToList();
五、装箱和拆箱
装箱:就是将值类型转换为引用类型
拆箱:就是将引用类型转换为值类型
看两种类型是否发生了装箱或者拆箱,要看这两种是否存在继承关系。
using System.Collections;
using System.Diagnostics;
namespace _076_拆箱装箱
{
class Program
{
static void Main(string[] args)
{
//int n = 0;
//object o = n;//值类型转化为衍生类型
//int nn = (int)o;//拆箱
//ArrayList list = new ArrayList();
//List<int> list = new List<int>();
//这个循环发生了100000次装箱操作
//00:00:00.0521637 装箱会影响系统的性能问题
//00:00:00.0046141
//Stopwatch sw = new Stopwatch();
//sw.Start();
//for(int i = 0; i < 1000000;i++)
//{
// list.Add(i);
//}
//sw.Stop();
//Console.WriteLine(sw.Elapsed);
}
}
}
特别注意:
//这个地方没有发生任意类型的装箱或者拆箱
//string str = "123";
//int n = Convert.ToInt32(str);
//IComparable是int类型的接口,也属于继承关系所以这个是装箱
int i = 10;
IComparable n = i;