c#学习笔记

c#学习笔记

异常处理的机制

1.异常处理的基本语法

int x=0;

try
{
int y=100/x;
}
catch(Exception e) //捕获异常 Ststem.Exception
{
    Console.Writeline(e.Message); //打印异常消息 或者处理异常的操作
}
finally // 不管是否捕捉到异常  都要执行
{
    Console.Writeline("不管怎么样,都打印");
}
// 放在finally后不执行 
throw new NullReferenceException().//扔出异常

2.异常类

System.IO.IOException   //处理I/O错误
System.IndexOutOfRangeException  //处理当方法只想超出范围的数组索引时生成的错误
System.ArrayTypeMismatchException  //处理当数组类型不匹配时生成的错误
System.NullReferenceException    //报空
System.DivideByZeroException  //处理当除以零是生成的错误
System.InvalidCastException    // 处理在类型转换期间生成的错误
System.OutOfMemoryException    // 处理空闲内存不足生成的错误
System.StackOverflowException  // 处理栈溢出生成的错误

3.创建用户自定义异常

用户自定义的异常类需要继承 ApplicationException

class TestTemperature
   {
      static void Main(string[] args)
      {
         Temperature temp = new Temperature(); // 实例化一个温度类  
         try
         {
            temp.showTemp();//温度类中 当温度为零 会出现异常TempIsZeroException
         }
         catch(TempIsZeroException e) // 捕捉到异常
         {
            Console.WriteLine("TempIsZeroException: {0}", e.Message); // 打印异常信息
         }
         Console.ReadKey();
      }
   }

public class TempIsZeroException : ApplicationException // 继承 ApplicationException
{
    public TempIsZeroException (string message):base (message)  // 构造方法 
    {   
    }
}

public class Temperature 
{
    int temperature = 0;
    public void showTemp()
    {
        if(temperature==0)
        {
         throw (new TempIsZeroException("Zero is found"));   
        }
        else
        {
            Console.WriteLine("Temperature:{0}",temperature);
        }
    }
}

文件的输入与输出

这里普及一个知识 流:通过通信路径传递的字节序列。有两个主要的流:输入流和输出流。输入流用于从文件从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。

I/O类

BinaryReader   从二进制流读取原始数据
BinaryWriter   以二进制格式写入原始数据
BufferedStream 字节流的临时存储
Directory      有助于操作目录结构
Directoryinfo  用于对目录执行操作
Driveinfo      提供驱动器的信息
Fire           有助于处理文件
FileInfo       用于对文件执行操作
FileStream     用于文件中任何位置的读写
MemoryStream   用于随机访问存储再内存中的数据流
Path           对路径信息执行操作
StreamReader   用于从字节流中读取字符
StringWriter   用于写入字符串缓冲区
    

FileStream 类

System.IO命名空间中的FileStream类有助于文件的读写与关闭。这个类派生自抽象给类Stream。

FileStream F = new FileStream("sample.txt",FileMode.Open,FileAccess.Read,FileShare.Read);
参数描述
FileModeAppend:打开一个已有的文件,并将光标防止在文件的末尾。如果文件不存在,则创建文件。 Create:创建一个新的文件。如果文件已存在,则删除就文件,然后创建新文件。 CreateNew:指定操作系统应该床i教案一个新的文件,如果文件已存在,则抛出异常。 Open:打开一个已有的文件。如果文件不存在,则抛出异常 OpenOrCreate:指定操作系统应打开一个已有文件。如果文件不存在,则用指定的名称创建一个新的文件打开。 Truncate: 打开一个已有文件,文件一旦打开,就将被截断为零字节大小。然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期。如果文件不存在,则抛出异常。
FileAccessFileAccess枚举的成员有:Read、ReadWrite和Write、Write
FileShareInheritable:允许文件句柄可由子进程继承。Win32 不直接支持此功能。 None:谢绝共享当前文件。文件关闭前,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败。 Read:允许随后打开文件读取。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求(由此进程或另一进程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 ReadWrite:允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 Write:允许随后打开文件写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 Delete:允许随后删除文件。

类的深入理解

类有 定义与声明 字段与属性(属性的好处再后面代码量上去才能体会)

编程规范上 定义类时 习惯把所有的字段设置为 private 只可以在类内部访问,你不可以通过对象访问

为字段提供 set 方法,来设置字段的值 这便是通过属性来访问字段

pubilic int Age{get ;set} 属性的简写形式 自动生成age的字段。

匿名类型

var age=100;这里再给age赋值的时候 将age的类型确定为 int 类型 后面给age赋其他类型的值就会报错

如果如果var age ; 不赋值 则可以赋任何类型的值。

这里 var list=List(){1,2,3}; 泛型列表 就是匿名类型 一开始并不知道他的类型

GC Garbage Collector 垃圾回收器

值类型和引用类型在内存中的储存形式 值入栈 引用类型 的声明放在栈中 存内存地址 值放在堆中 当在堆中 申请的内存没有引用了 GC就会回收内存。

装箱与拆箱

装箱必要条件时 两类有继承关系 int i =100;obj a= i; 这个a时装箱后的int类型 string s =i.ToString(); 这string类型还是string类型 他们之间没有继承关系 所以不是装箱。

装箱 字面意思 把栈里的值类型 copy到堆里装起来 然后返回内存地址 给栈中的obj引用

拆箱(有装箱操作之后才会有拆箱操作) 字面意思 把堆里的东西copy一份 拆出来直接放进栈里

抽象类

抽象类可以包含抽象方法 也可以包含非抽象方法

抽象方法不实现 都是子类来实现

虚方法

virtual 子类 用 override重写 覆盖虚方法

用 new 重写的话就是隐藏虚方法 申明父类调用父类的virtual方法 如 People p= new Sudent;

这里和类里的变量不一样 声明父类A a= new 子类B();这里存在一个向上转型 就是这里只能调用父类的成员变量。

泛型

通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。

泛型类的定义

class ClassA<T>{//T代表一个数据类型,当使用ClassA进行构造的时候,需要制定T的类型
    private T a;
    private T b;
    public ClassA(T a,T b){
        this.a=a;
        this.b=b;       
    }
    public string GetSum(){
        return a+""+b;//a+b 类型不确定 所以直接给他转成string
    }
}

泛型方法

public static string GetSum<T>(T a,T b){
    return a+""+b;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大橘915818

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值