c#【里氏替换】--乌云后依然是灿烂的晴天

里氏替换

子类想调用父类中的属性或方法不可以直接调用,需要将子类转换成父类,通过父类去调用,转换的过程是里氏转换

父类子类转换四种情况

其中有两种情况代码没有错误,但是会报异常,在代码中已经分析

			 // 1.
            //Student stu = new Student();//子类转换成父类,可以隐式转换
            //Person p = stu;         
            //p.Show();
            //Console.ReadKey();

            //2.
            //Person p = new Teacher();//
            //Teacher t = (Teacher)p;   //如果 new的时候 new的是子类,那么再转换这个子类的时候可以
            //t.SayHi();

            //3.代码正确,但是会报异常(子类老师转换成学生)
            //Person p = new Teacher();//如果new的是子类,转换的时候 转的另一个子类,报异常
            //Student stu = (Student)p;
            //stu.SayHello();
            //Console.ReadKey();
            //4  代码正确会报异常,父类不知能直接转为子类(父亲去当儿子)
            //Person p = new Person();
            //Student stu = (Student)p;

IS/AS

is转换:返回的是bool值,true为能转换,false不能转换。
as转换:使用as转换时,如果转换不了,不报异常,返回值为Null.在调用方法时报异常。 As可以直接转 is可以做as做的事情

			Person p = new Student();
            bool result = p is Teacher;
            if (result)
            {
                Teacher t = (Teacher)p;
                t.SayHi();
            }
            else
            {
                Console.WriteLine("转换不了");
            }
            Console.ReadKey();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章