【C#基礎】里氏轉換
阿新 • • 發佈:2019-01-07
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