Keep on going never give up.

Let's Go

C# 学习笔记(43)里氏转换

C#Lonely2019-05-18 15:40:3835次0条

里氏转换:

(1)、子类可以赋值给父类:如果有一个地方需要一个父类参数,我们可以给一个子类代替。

代码示例:

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //子类赋值给父类
            //B b = new B();
            //A a = b;
            //可以简写成:
            A a = new B();
            //子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。
            a.A_SayHello();
            a.B_SayHello(); //这句是错误的,因为父类对象访问不了子类的成员
        }        
    }
   
    class A
    {
       public void A_SayHello()
        {
            Console.WriteLine("大家好!我是A类");
        }
    }

    class B: A
    {
        public void B_SayHello()
        {
            Console.WriteLine("大家好!我是B类");
        }
    }

}

(2)、如果父类中装的是子类对象,那么可以将这个父类强转为子类对象。

代码示例:

//如果父类中装的是子类对象,那么可以将这个父类强转为子类对象。
A a = new B();            
B b = (B)a; //表示把父类强转成子类
b.A_SayHello();
b.B_SayHello();

//is:表示类型转换,如果转换成功则返回true,否则返回false.
//as:如果能转换成功,则返回对应对象,否则返回null。

//is用法:
//if (a is B)
//    B b = (B)a;
//else
//    Console.WriteLine("转换失败");

//as用法:
//B b = a as B;




暗锚,解决锚点偏移

文章评论

    嘿,来试试登录吧!