传智 赵建宇 C#基础课程整理
里氏转换
// Example
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lishizhuanhuan
{
class lishizhuanhuan
{
static void Main(string[] args)
{
Person[] pers = new Person[10];
// 可以赋值子类对象也可以赋值父类对象
pers[0] = new Person();
pers[1] = new Student();
pers[2] = new Teacher();
// 父类类型的只能调用父类的成员, 子类既可以调用父类成员又可以调用子类成员,但是需要强制类型转化
if (pers[0] is Person)
{
pers[0].PersonSayHi();
}
if ((Student)pers[1] is Student)
{
((Student)pers[1]).PersonSayHi();
((Student)pers[1]).StudentSayHi();
}
}
}
public class Person
{
public void PersonSayHi()
{
Console.WriteLine("I am a person!");
}
}
public class Student : Person
{
public void StudentSayHi()
{
Console.WriteLine("I am a student!");
}
}
public class Teacher : Person
{
public void TeacherSayHi()
{
Console.WriteLine("I am a teacher!");
}
}
public class Meinv : Person
{
public void MeinvSayHi()
{
Console.WriteLine("I am a Meinv");
}
}
public class Yeshou : Person
{
public void YeshouSayHi()
{
Console.WriteLine("I am a monster!");
}
}
public class Police : Person {
public void PoliceSayHi()
{
Console.WriteLine("I am a police");
}
}
}
- 子类可以赋值给父类
- 父类可以强转成子类
- 类型转换
- is
// 如果P 是A类,则运行X,否则运行Y if (p is A) {run X;} else{ run Y;}
- as
//如果能转换,则返回对象,否则返回null Car car = truck as Car;
访问修饰符 protected
public: 到处都可以访问
private: 只有当前类可以访问,子类也访问不了
protected: 子类也可以访问,其他类无法访问