1. 程式人生 > >【C#基礎】里氏轉換

【C#基礎】里氏轉換

1、里氏轉換
1)、子類可以賦值給父類
2)、如果父類中裝的是子類物件,那麼可以將這個父類強轉為子類物件。
子類物件可以呼叫父類中的成員,但是父類物件永遠都只能呼叫自己的成員。

    class Program
    {
        static void Main(string[] args)
        {
            //Person p = new Teacher();//子類可以賦值給父類
            //Teacher t = (Teacher)p;//如果父類裡面裝的是子類物件,可以將父類強轉為子類
            //t.TeacherSayHello();
            //Console.ReadKey();

            Person p = new Teacher();
            if (p is Teacher)
            {
                Teacher t = (Teacher)p;
                t.TeacherSayHello();
            }
            else
            {
                Console.WriteLine("轉換失敗");
            }
            Console.ReadKey();

            //Person p = new Teacher();
            //Teacher t = p as Teacher;//能夠轉換,返回對應的物件
            //(p as Student).StudentSayHello();//不能轉換,返回null
            //t.TeacherSayHello();
            //Console.ReadKey();
        }
    }

    public class Person
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }

        }

        private char _gender;
        public char Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        public void SayHello()
        {
            Console.WriteLine("我是人類");
        }
    }

    public class Teacher : Person
    {
        private decimal _salary;
        public decimal Salary
        {
            get { return _salary; }
            set { _salary = value; }
        }

        public void TeacherSayHello()
        {
            Console.WriteLine("我是一名教師");
        }
    }

    public class Student:Person
    {
        private string _id ;
        public string Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public void StudentSayHello()
        {
            Console.WriteLine("我是學生");
        }
    }


2、is和as
is:表示型別轉換,如果能夠轉換成功,則返回一個true,否則返回一個false
as:表示型別轉換,如果能夠轉換則返回對應的物件,否則返回一個null