1、里式转换:
首先写三个类,一个父类,两个子类,如下:
public class Persion
{
public void PersionSayHello()
{
Console.WriteLine("我是人类!");
}
}
public class Student : Persion
{
public void StudentSayHello()
{
Console.WriteLine("我是学生类!");
}
}
public class Teacher : Persion
{
public void TeacherSayHello()
{
Console.WriteLine("我是老师类!");
}
}
(1)、子类对象可以赋值给父类对象
Student s = new Student();
Persion p = s; // 子类对象赋值给父类对象,这两行可以写成下面一行:
Persion p = new Student();
应用:当一个地方需要用父类作为参数时,我们可以使用子类代替。
string 的 Join 方法,第二个参数要放的是Object[] 数组,由于Object是所有类的父类,所以此处可以其任意子类的数组:
string.Jion("|", new string[]{"张三", "李四", "王五"});
(2)、如果父类对象中装的是子类的对象,可以将这个父类对象强转为子类对象。
Persion p = new Student();
Student s = (Student)p; // 强转成功,因为p中存放的是Student的对象。
Teacher t = (Teacher)p; // 强转失败。因为p中没有存放Teacher的对象。
一般在强转之前要先做一个判断:
if (p is Teacher) // 表示:如果p可以强转成Teacher,返回true,否则返回false。
{
Teacher t = (Teacher)p;
}
Teacher t = p as Teacher; // 表示:如果p可以强转成Teacher,则返回Teacher的对象,否则返回null。