父类与子类的转换as,is

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

namespace 子类与父类的相互转换
{
    class Program
    {
        static void Main(string[] args)
        {
            //try catch finally 与 continue
            //如果在try中遇到continue,则忽略try中continue之后的语句
            //但是依然执行finally中语句
            //finally之外的语句也不执行
            bool _flag = true;
            while(true)
            {
                try
                {
                    //if(_flag)
                    //    continue;
                    
                    //如果_falg为true,这下面的两句不执行
                    //Person per = new Student();
                    //per.Say();//此时输出father 

                    //类的转换:as is
                    //1. is:返回bool类型,指示是否可以做这个转换
                    //2. as:如果转换成功,则返回对象,否则返回null
                    //作用:我们可以将所有的子类当做是父类来看,针对父类进行编程
                    //      可以写出通用代码,从而适应需求的不断改变  
                    Person per = new Student();

                    Student stu1 = per as Student;
                    if(stu1 != null)
                    {
                        stu1.Say();
                    }

                    Teacher tea1 = per as Teacher;
                    if(tea1 == null)
                    {
                        Console.WriteLine("转换失败");
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    //如果try中执行了continue,则这两句依然要执行
                    Console.WriteLine("finally");
                    Console.ReadKey();
                }

                //如果在try中执行continue,则下面的两条语句并不执行
                Console.WriteLine();
                Console.ReadKey();
            }
            
        }
    }

    class Person
    {
        public void Say()
        {
            Console.WriteLine("father");
        }
        
    }

    class Teacher:Person
    {
        public new void Say()
        {
            Console.WriteLine("Teacher");
        }
    }

    class Student:Person
    {
        public new void Say()
        {
            Console.WriteLine("Student");
        }
    }
     
}

  

posted @ 2017-09-29 18:51  mCat  Views(692)  Comments(0Edit  收藏  举报