JoshWindsor 发表于 2022-10-2 15:05

Unity面试题学习笔记(8)——C#核心

1.里氏替换原则:


[*]基本概念,里氏替换原则是面向对象七大原则中最重要的原则。任何父类出现的地方,派生类都可以替代。
[*]表现,父类容器装派生类对象,因为派生类对象包含了父类所有内容
[*]作用,方便进行对象存储和管理。
[*]实现,
      //里氏替换原则,父类容器装载子类对象
      Test player = new Player();
      Test monster = new Monster();
      Test boss = new BOSS();

      List<Test> m_list = new List<Test>() { new Player(), new Monster(), new BOSS() };

      //由于容器目前是父类的,所以不能直接通过该父类容器来使用子类对象中的方法

[*]is和as,is判断一个对象是否是指定类对象,返回值bool;as将对象转换为指定类的对象,返回值为指定类,成功返回指定类对象,失败返回空(null)。
//is
      //用于判断某个对象是不是指定类的对象
      if(player is Player)
      {
            
      }
//as
      //将一个对象转换为指定类的对象(注意不能用它本身来存储as后的结果)
      Player p = player as Player;
      
      //配合使用
      if(player is Player)
      {
            //Player p2 = player as Player;
            //p2.Attack();

            (player as Player).Attack();
      }
      //遍历判断
      foreach(Test temp in m_list)
      {
            if(temp is Player)
            {
                (temp as Player).Attack();
            }
            else if(temp is Monster)
            {
                (temp as Monster).MonsterAttack();
            }
            else if(temp is BOSS)
            {
                (temp as BOSS).BossAttack();
            }
      }

[*]注意,不能用子类容器装父类对象,否则会出错。
(to be continued ... )
页: [1]
查看完整版本: Unity面试题学习笔记(8)——C#核心