C#学习七(包含File字节流,list泛型集合、拆装箱、ictionary字典,文件流FileStream、StreamReader和StreamWrite、多态)

一、对前面部份的总结

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;

六、ictionary字典


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值