1、里式转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以将这个父类强制转为子类对象。
2、
子类对象可以调用父类中的成员,但是父类对象永远都值能调用自己的成员。
3、
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false。
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null。
using System;
namespace 里式转换
{
class Program
{
static void Main(string[] args)
{
//子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替
Student s = new Student();
//如果父类中装的是子类对象,那么可以将这个父类强转为子类对象
//Person p = new Person();
Person p = s;
/*Student ss = (Student)p;
ss.StudentSayHello();
Console.ReadKey();*/
if(p is Teacher)
{
Teacher ss = (Teacher)p;
ss.TeacherSayHello();
}
string str=string.Join("|", new string[] { "1", "2", "3", "4" });
Console.WriteLine(str);
Console.ReadKey();
}
}
public class Person
{
public void PersonSayHello()
{
Console.WriteLine("我是父类");
}
}
public class Student:Person
{
public void StudentSayHello()
{
Console.WriteLine("我是学生");
}
}
public class Teacher:Person
{
public void TeacherSayHello()
{
Console.WriteLine("我是老师");
}
}
}
里式转换练习:
using System;
namespace 里式转换练习
{
class Program
{
static void Main(string[] args)
{
//创建10个对象,通过一个循环 去调用他们各自打招呼的方法
/*Student s = new Student();
Person p = new Person();
ShuaiGuo sg = new ShuaiGuo();*/
Person[] pers = new Person[10];
Random r = new Random();
for(int i=0;i<pers.Length;i++)
{
int rNumber = r.Next(1, 7);
switch(rNumber) //1~6
{
case 1:pers[i] = new Student();
break;
case 2:pers[i] = new Teacher();
break;
case 3:pers[i] = new ShuaiGuo();
break;
case 4:pers[i] = new MeiLv();
break;
case 5:pers[i] = new YeShow();
break;
case 6:pers[i] = new Person();
break;
}
}
for(int i=0;i<pers.Length;i++)
{
//ers[i].PersonSayHi();
if(pers[i] is Student)
{
((Student)pers[i]).PersonSayHi();
}
else if(pers[i] is Teacher)
{
((Teacher)pers[i]).TeacherSayHi();
}
else if(pers[i] is ShuaiGuo)
{
((ShuaiGuo)pers[i]).ShuaiGuoSayHi();
}
else if(pers[i] is YeShow)
{
((YeShow)pers[i]).YeShowSayHi();
}
else if(pers[i] is MeiLv)
{
((MeiLv)pers[i]).MaiLvSayHi();
}
else
{
pers[i].PersonSayHi();
}
}
}
}
public class Person
{
public void PersonSayHi()
{
Console.WriteLine("我是人类");
}
}
public class Student:Person
{
public void StudentSayHi()
{
Console.WriteLine("我是学生");
}
}
public class Teacher:Person
{
public void TeacherSayHi()
{
Console.WriteLine("我是老师");
}
}
public class MeiLv:Person
{
public void MaiLvSayHi()
{
Console.WriteLine("我是镁铝");
}
}
public class ShuaiGuo:Person
{
public void ShuaiGuoSayHi()
{
Console.WriteLine("我是帅锅");
}
}
public class YeShow:Person
{
public void YeShowSayHi()
{
Console.WriteLine("我是野兽");
}
}
}