里氏轉換,
1子類可以賦值給父類。
2如果父類中裝的是子類對象,可以將這個父類強轉換成子類。
看看這個例子就能懂。
namespace 里氏轉換
{
class Program
{
static void Main(string[] args)
{
//Student stu = new Student();
//Person P1 = stu;
string s = string.Join("|", new string[] { "1", "2", "3", "4", "5" });
//里氏轉換,
//1子類可以賦值給父類
//實例化一個子類對象
//Teachaer teach = new Teachaer();
//聲明一個父類對象
//Person P1;
//將子類的值賦值給父類
// P1 = teach;
//可以簡寫為
// Person P2 = new Student();
//P2.SayHello();
//如果父類中裝的是子類對象,可以將這個父類強轉換成子類
//Student stu2 = (Student)P2;
//stu2.studentSayHello();
//一般在轉換前做一個判斷,判斷的關鍵字為is和as。is的返回值為TURE和FALSE.as關鍵字,如果可以轉換,則返回轉換的對象,如果不能轉換,則返回null。
// Teachaer t2 = P1 as Teachaer;
//t2.teacherSayHello();
//if (P1 is Teachaer)
//{
// Teachaer t1 = (Teachaer)P1;
// t1.teacherSayHello();
//}
//else
//{
// Console.WriteLine("轉換失敗");
//}
//Console.WriteLine(s);
//創(chuàng)建十個對象,通過循環(huán)去調用他們打招呼的方式,
//讓他們都繼承Person類,創(chuàng)建一個Person類的數組,
Person[] P = new Person[10];//打招呼要十次,所以創(chuàng)建十個元素的Person數組。
Random r = new Random();
//通過遍歷數組給P賦值
//先遍歷這個數組
for (int i = 0; i < P.Length; i++)
{
int rnubers = r.Next(1, 7);
//現(xiàn)在這個P數組什么都沒有,通過seich循環(huán)來給它賦值
switch (rnubers)
{
case 1:
P[i] = new Student();
break;
case 2:
P[i] = new Teachaer();
break;
case 3:
P[i] = new ShuaiGuo();
break;
case 4:
P[i] = new Meinv();
break;
case 5:
P[i] = new YeShou();
break;
case 6:P[i] = new Person();
break;//這樣就給P這個數組通過隨機數的方法完全賦值了。
}
//遍歷這個數組,來輸出sayhello的方法。
}
for (int i = 0; i < P.Length; i++)
{
//遍歷了這個數組 在這個地方如果輸出p[i].sayhello的方法的話,會全部輸出我是人類,
//是因為這是一個person類的數組,要通過里氏轉化,is或者as轉換成子類的對象才可以調用子類中的方法
if (P[i] is Student)
{
//進行轉換
((Student)P[i]).studentSayHello();
}
else if(P[i] is YeShou)
{
((YeShou)P[i]).YeShouSayHello();
}
else if(P[i] is Meinv)
{
((Meinv)P[i]).meiNvSayHello();
}
else if(P[i]is Teachaer)
{
((Teachaer)P[i]).teacherSayHello();
}
else if(P[i] is ShuaiGuo)
{
((ShuaiGuo)P[i]).shuaiGuoSayHello();
}
else
{
P[i].SayHello();
}
}
Console.ReadKey();
}
}
class Person
{
public void SayHello()
{
Console.WriteLine("我是人類");
}
}
class Student : Person
{
public void studentSayHello()
{
Console.WriteLine("我是學生");
}
}
class Teachaer : Person
{
public void teacherSayHello()
{
Console.WriteLine("我是老師");
}
}
class Meinv : Person
{
public void meiNvSayHello()
{
Console.WriteLine("我是美女");
}
}
class ShuaiGuo : Person
{
public void shuaiGuoSayHello()
{
Console.WriteLine("我是帥鍋");
}
}
class YeShou : Person
{
public void YeShouSayHello()
{
Console.WriteLine("我是野獸");
}
}
}