接口和异常处理

1.接口

    接口是一个规约,是一种能力,当你遵循这个规约的时候就获得了这种能力

    定义接口使用interface 关键字
    一般接口名要以大写I开头
    接口中只能包含方法【属性、事件、索引器最终都是方法,所以可以说接口中只能包含方法】
    接口中的成员不能有任何访问修饰符,默认是public,如果手动写了访问修饰符这报错!!!!
    接口中的成员不能有任何实现,就像抽象方法一样不能有实现

    接口中的属性也必须交给实现该接口的类来实现

当一个抽象类实现某个接口的时候,如果实现的时候把接口中的成员标记为了abstract ,同时该类也是一个抽象类,此时可以不对接口中的成员进行实现。

    当子类抽象不出来一个父类的时候会用到接口

例如:鸟和飞机都会飞。但是鸟和飞机不属于同一个父类,这时候就可以用接口

一个类只有一个父类,但可以实现多个接口,写的时候要把父类写在最前边

    public class RubberDuck : Duck, IBarkable
    {
        public void Bark()
        {
            Console.WriteLine("唧唧叫!!!!!");
        }
    }
 Person类实现了IIntroduce接口,并且把接口中的Introduce()方法实现成虚方法,所以继承Person类的子类就可以重写该方法了。

//创建一个接口

    public interface IIntroduce
    {
        // 介绍说明自己的情况
        void Introduce();
    }
//创建一个类把接口中方法显现为虚方法

    class Person : IIntroduce
    {
        public virtual void Introduce()
        {
           
        }
    }
//子类重写父类虚方法
    class American : Person, IIntroduce
    {
        public override void Introduce()
        {
            Console.WriteLine("社会保险号:00000");
        }
    }
>显示实现接口

实现接口的时候在方法名前面加    接口名.方法名()  就叫做显示实现接口。

//显示实现接口的访问修饰符默认是没有的,类中成员没有写访问修饰符这默认就是private 

//显示实现接口是私有的所以必须通过接口名才能访问的到。

        public void Fly()
        {
            Console.WriteLine("实现了IFace1中的Fly方法。");
        }
//其中IFace1为隐式实现,IFace2为显示实现
        void IFace2.Fly()
        {
            Console.WriteLine("实现了IFace2中的Fly方法。");
        }
当两个接口中的方法名字相同时可以用显示实现

2.异常处理

            try
            {
                //可能出现异常的代码!!
                //在try块中的代码,如果一旦某句代码发生了异常,这从该条语句直接跳转到catch 块中,在try 块中该条语句后续的代码不会继续执行了。
            }
            catch
            {
                //当try块中的代码发生异常后,执行这里的代码
                //如果try块中的代码没有发生异常,这不会执行catch 块中的代码
            }
            finally
            {
                //无论try块中的代码是否发生异常,都会执行这里的代码 
            }
 手动抛出一个异常。 
 throw new Exception();

可以写多个catch块

            try
            {
                object o = null;
                Console.WriteLine(o.ToString());

                //除数不能为0,如果为0,则报异常!!!
                int r = apples / m;
                Console.WriteLine(r);
            }
            //一个try块可以跟多个catch块,这样就可以对不同的异常进行不同的处理。最后可以再加一个catch,参数是Exception ,这样就可以把所有的异常都捕获到了。
            catch (NullReferenceException ex)//空指针
            {
                Console.WriteLine(ex.Message);
            }
            catch (DivideByZeroException ex)//除0
            {
                Console.WriteLine(ex.Message);
            }
            catch (ArgumentException ex)//传递非法参数
            {
                Console.WriteLine(ex.Message);
            }
            catch (FileNotFoundException ex)//文件未找到
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)//所有异常信息
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                //执行最终的善后处理,比如资源释放,因为无论程序执行是否发生异常都需要释放资源。
                Console.WriteLine("这里是finally中的代码1!!!");
            }

            while (true)
            {
                Console.WriteLine("请输入一个姓名:");
                string name = Console.ReadLine();
                //一般最好使用if-else等这些逻辑判断,避免使用异常。使用异常效率不高。
                if (name.StartsWith("张"))
                {
                    //手动抛出一个异常。 
                    throw new Exception("不能是姓张的。");
                }
                else
                {
                    Console.WriteLine("姓名是:" + name);
                }
            }
            Console.WriteLine("ok");
            Console.ReadKey();
<pre name="code" class="csharp">            //如果在catch块中使用了throw,则后面的代码如果不放在finally中,就不会执行。
            //Console.WriteLine("M1方法的finally中的代码。。。");
            //手动抛出一个异常。
            //throw new Exception();


 









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值