C# 异常处理

一 异常的概念

1 C# 中的异常处理

① try{…};
② catch(Exception e){…};
③ finally{…};

2 System.Exception类

① public Exception();
② public Exception(string s);
③ Message属性;
④ StackTrace属性;

3 几种常用的异常类

System.OutOfMemoryException
System.StackOverflowException
System.NullReferenceException
System.TypeInitializationException
System.InvalidCastException
System.ArrayTypeMismatchException
System.IndexOutOfRangeException
System.MulticastNotSupportedException
System.ArithmeticException
System.DivideByZeroException
System.StackOverflowException

二 捕获和处理异常

1 捕获异常

① try{};
② catch(AException e1){}
③ catch(BException e2){}}
④ catch(更一般的Exception e){}
⑤ finally{}
注意:
catch{}表示捕获所有种类的异常;

三 抛出异常

① throw语句抛出一个异常的语法为:
throw expression;
② 一般是这样的:
if(xxxxxxx) throw new SomeException(信息);

四 创建用户自定义异常类

1 从Exception或ApplicationException继承;

2 重抛异常;

throws;

3 异常链接

① throw new Exception(“msg”,e);
② 这里e称为内部异常;
③ InnerException属性;
④ 使得外部能进一步知道内部的异常原因;

五 算术溢出与checked

1 对溢出进行检查

① 对整个程序 csc/checked XXXX.cs;
② 对部分程序;
针对表达式:checked(表达式)及unchecked(表达式);
针对块语句:checked{…}及unchecked{…};

2 对溢出异常进行捕获

① try{} catch(OverflowException e){}

总结:

1 C#中异常处理

① try{…};
② catch(Exception e){…};
③ finally{…}

2 自定义异常类

从Exception或ApplicationException继承;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 银行系统内部异常
{
    public class DataHouse
    {
        public static void FindData(long ID)
        {
            if (ID > 0 && ID < 1000)
                Console.WriteLine(ID);
            else
                throw new DataHouseException("已到文件尾");
        }
    }

    public class BankATM
    {
        public static void GetBalanceInfo(long ID)
        {
            try
            {
                DataHouse.FindData(ID);
            }
            catch(DataHouseException e)
            {
                throw new MyAppException("账号不存在", e);
            }
        }
    }

    public class DataHouseException:ApplicationException
    {
        public DataHouseException(string message):base(message)
        {

        }
    }

    public class MyAppException:ApplicationException
    {
        public MyAppException(string message):base(message)
        { }

        public MyAppException(string message,Exception inner):base(message,inner)
        { }
    }

    public class Test
    {
        public static void Main()
        {
            try
            {
                BankATM.GetBalanceInfo(12345L);
            }
            catch(Exception e)
            {
                Console.WriteLine("出现了异常:{0}", e.Message);
                Console.WriteLine("内部原因:{0}", e.InnerException);
            }

            Console.ReadKey();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值