C# 里氏转换原则

优点

1. 提高代码的重用性,子类拥有父类的方法和属性;
2. 提高代码的可扩展性,子类可形似于父类,但异于父类,保留自我的特性。

类型转换

显示转换:父类对象转换为子类类型必须使用强制转换

case1

Person p = new Person();
Person p1 = new Student ();//转换失败,实际上调用的是父类的方法

case2

Person p = new Person();
Student stu = (Student)p;//转换失败
stu.SayHello();

case3

Person p = new Teacher();
Teacher t = (Teacher)p;//转换成功
t.SayHi();

隐式转换:子类对象转换为父类类型可以直接转

Student stu = new Student();//转换成功
Person p = stu;
p.Show();

关键字is/as转换:

is转换:返回的是bool值,true为能转换,false不能转换。
as转换:使用as转换时,如果转换不了,不报异常,返回值为Null.在调用方法时报异常。

//关键字is转换
Person p = new Student();//父类转换为子类
bool result = p is Teacher;
if(result )
{
	Teacher t=(Teacher)p;
}
else
{
	Console.WriteLine("转换不了");
}
Console.ReadKey();
//关键字as转换
Teacher t = new Teacher();//子类转换为父类
Person p = t as Person;
p.PerShow();

Person p = new Teacher();//父类转换为子类
Teacher t = p as Teacher;
t.TeaShow();

关键字is转换练习

随机生成类,调取生成类的方法。

static void Main(string[] args)
{
	Person[] per = new Person[10];//将类放到一个数组
	Random r = new Random();//随机数
	
	for (int i = 0; i < per.Length ; i++)
	{
	    int num = r.Next(1, 7);
	
	    switch (num)//依据随机数调取类
	    {
	        case 1: per[i]=new Teacher();break;
	        case 2: per[i] = new Student();break;
	        case 3: per[i] = new ShuaiGuo();break;
	        case 4: per[i] = new MeiNv();break;
	        case 5: per[i] = new YeShou();break;
	        case 6: per[i] = new Person();break;
	    }
	}
	
	for (int i = 0; i < per.Length ; i++)
	{
	    SayType(per[i]);
	    
	}
	Console.ReadKey();
}

public static void SayType(Person p)//方法:随机调取类后调用其中的方法
{
    if(p is Teacher)
    {
        ((Teacher)p).PerShow();
    }
    else if(p is Student )
    {
        ((Student)p).StuShow();
    }
    else if(p is ShuaiGuo)
    {
        ((ShuaiGuo)p).shuaiShow();
    }
    else if(p is MeiNv)
    {
        ((MeiNv)p).MeiShow();
    }
    else if(p is YeShou)
    {
        ((YeShou)p).YeShow();
    }
    else if (p is Person)
    {
        ((Person)p).PerShow();
    }
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值