C#学习日志11

16 篇文章 0 订阅
9 篇文章 0 订阅

目录

FileStream文件流

*多态


FileStream文件流

    FileStream file = new FileStream(@"C:\Users\27412\Desktop\new1.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite);

stream.Read()

            byte[] buffer =new byte[1024*1024*5];
            //放回此次读取的有效字节数
            int r =file.Read(buffer, 0, buffer.Length);
            //将字节数组的每一个元素按指定的编码格式解码成字符串  读取有效的
            string s = Encoding.Default.GetString(buffer,0,r);
            //关闭流
            file.Close();
            //释放流的资源
            file.Dispose();
            Console.WriteLine(s);
            Console.ReadKey();

将创建文件流对象写在using中,会自动帮助我释放流的资源 stream.Write()

         
   //写入数据
          using(FileStreamfile=newFileStream(@"C:\Users\27412\Desktop\new1.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite))
            {
                            string str ="22222";
                        byte[] buffer =  Encoding.Default.GetBytes(str);
                        file.Write(buffer, 0, buffer.Length);
            }

写入时逐个覆盖

stringReader和streamWriter

   //使用stringReader读取文件
          using ( StreamReader sr = new StreamReader(@"C:\Users\27412\Desktop\new1.txt"))
          {
              while(!sr.EndOfStream)
              {
                  Console.WriteLine(sr.ReadLine());
              }
          }
            //用streamWriter
          //使用stringReader读取文件
          using (StreamWriter sw = new StreamWriter(@"C:\Users\27412\Desktop\new1.txt"))
          {

              sw.Write("333333");

          }
          Console.ReadKey();

*多态

让一个对象表现多种状态

三种手段:虚方法,抽象类,接口

1.虚方法

1).将父类的方法标记为虚方法,使用virtual

2).子类可以重写父类虚函数 override

 class per
    {
       
        public virtual void sayhello()
        {
            Console.WriteLine("我是人");
        }
    }


    class chinese:per
    {   
        public override void sayhello()
        {
            Console.WriteLine("我是中国人");
        }
    }

取消子类对象的差异性,增加程序的可扩展性

2.抽象类

当父类中的方法不需要实现时,可以写成抽象类

    public abstract class Animal
    {
        public abstract void Bark();//存在的意义是让子类重写
        //空实现和没有方法体不是一个概念
    }

    public class dog: Animal
    {
        public override void Bark()
        {
            Console.WriteLine("wwwww");
        }
    }
            Animal a = new dog();//抽象类无法直接创建对象,但是可以创建子类赋值
            a.Bark();
            Console.ReadKey();

抽象成员必须abstract 标记,并且不能实现

抽象类可以出现非抽象的成员

抽象成员必须出现在抽象类中

抽象类不能被实例化

子类重写函数的签名必须和父类一致

例子:模拟U盘写入电脑

 类实现

public abstract class Mobilestorage
    {
       public abstract void Read();
       public abstract void Write();

    }

    public class udisk:Mobilestorage
    {
        public override void Read()
        {
            Console.WriteLine("u盘正在读入数据");
        }
        public override void Write()
        {
            Console.WriteLine("u盘正在写入数据");
        }
    }
    public class mp3:Mobilestorage
    {

        public override void Read()
        {
            Console.WriteLine("mp3正在读取数据");
        }

        public override void Write()
        {
            Console.WriteLine("mp3正在写入数据");
        }
        public void playmusic()
        {
            Console.WriteLine("mp3正在播放音乐");
        }

    }
    public class computer
    {
        public void cpuRead(Mobilestorage ms)
        {
            ms.Read();
        }
        public void cpuWrite(Mobilestorage ms)
        {
            ms.Write();
        }

    }

实例化

      computer cpu = new computer();
            Mobilestorage ms = new udisk();
            cpu.cpuRead(ms);
            cpu.cpuWrite(ms);
            Console.ReadKey();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值