里氏轉換: Person p=new Student(); 如果說子類可以賦值給父類 那我們應該聲明一個父類類型去指向子類對象 如果說父類中裝的是子類對象 可以考慮將父類強轉為子類對象用 is 轉換成功返回 true as 轉換成功返回對應的對象 來接收ss students ss =p as st ...
里氏轉換:
- 子類可以賦值給父類 (如果有一個方法需要一個父類作為參數,我們可以 傳一個 子類對象)
- 如果父類中裝的是子類可以強轉為子類對象
- 子類對象可以調用父類成員,但是父類對象永遠只能只能調用父類自己的成員
Person p=new Student();
如果說子類可以賦值給父類 那我們應該聲明一個父類類型去指向子類對象
如果說父類中裝的是子類對象 可以考慮將父類強轉為子類對象用
is 轉換成功返回 true
as 轉換成功返回對應的對象 來接收ss
students ss =p as students;聲明一個students類型的對象
is的用法:
if(p is students)
{
((students)p).studentsSayHello();
}
else
{
cw("失敗");
}
1 namespace _里氏轉換 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //// 1、里氏轉換 8 ////1)、子類可以賦值給父類:如果有一個地方需要一個父類作為參數,我們可以給一個子類代替 9 // Student s = new Student(); 10 Person p = new Student();//s; 11 12 //string str = string.Join("|",new string[] { "1", "2", "3", "4" }); 13 //Console.WriteLine(str); 14 //Console.ReadKey(); 15 16 ////2)、如果父類中裝的是子類對象,那麼可以講這個父類強轉為子類對象。 17 18 //is的用法 19 //if (p is Student) 20 //{ 21 // Student ss = (Student)p; 22 // ss.StudentSayHello(); 23 //} 24 //else 25 //{ 26 // Console.WriteLine("轉換失敗"); 27 //} 28 //as的用法 29 Student t = p as Student; 30 t.StudentSayHello(); 31 Console.ReadKey(); 32 } 33 } 34 35 public class Person 36 { 37 public void PersonSayHello() 38 { 39 Console.WriteLine("我是父類"); 40 } 41 } 42 public class Student : Person 43 { 44 public void StudentSayHello() 45 { 46 Console.WriteLine("我是學生"); 47 } 48 } 49 public class Teacher : Person 50 { 51 public void TeacherSayHello() 52 { 53 Console.WriteLine("我是老師"); 54 } 55 } 56 57 58 }