12386人加入学习
(21人评价)
C#编程-第二季-面向对象-宇宙最简单2021最新版

制作完成于2021-10月20日 使用VS2019

价格 免费

方法一:

使用new方式来实现重写

public new void CarInfo()

但严格意义上来说并不是重写,而是隐藏原有的方法新建一个同名的方法

 

方法二:

使用虚函数+override的方法来实现重写

1、首先要在父类中将可以重写的方法设置为vitual

2、在子类中使用override的方法进行重写

 

声明父类enemy,但构造的时候以子类enemy = new Boss(); 那么enemy构造后的实例就是子类

在 C# 中,当你使用 Enemy enemy = new Boss(); 时,虽然实际创建的是 Boss 的实例,但通过 Enemy 类型的变量 enemy 访问它时,只能调用 Enemy 类中定义的方法和属性,无法直接访问 Boss 特有的成员。这是由 C# 的编译时类型检查多态机制决定的。

Enemy enemy = new Boss(); 这种写法看似反直觉,但它在面向对象编程(尤其是多态)中扮演着核心角色。是否需要避免这种写法,完全取决于具体场景

实现多态(Polymorphism)

  • 核心目的:通过父类引用统一管理不同子类对象,运行时自动调用子类重写的方法。

[展开全文]

⭐虚函数

子类可以赋值给父类

父类不可赋值给子类

1. 虚函数的特点

 虚函数是面向对象语言中多态性的重要实现. 当一个函数方法在声明时, 前面带了virtual关键字, 这个函数就是一个虚函数. 它与非虚函数的主要区别在于它的实现可以在派生类中进行重写(override)(非强制要求). 重写后的函数一样也是虚函数, 当一个类或其基类中存在虚函数后就不允许出现同名, 返回值, 参数类型个数相同的非虚函数.

 虚函数由于可以被子类改写的特点, 不允许设为私有(private), 同时也不能和static, override, abstract等一起使用.除了函数方法外, C#中还可以用virtual修饰属性, 索引器, 事件等等.

2. 虚函数的执行过程

 当调用一个对象的一个函数时, 系统会首先去检查该对象的声明类中这个函数是不是虚函数, 如果不是虚函数就直接执行函数. 如果是虚函数的话再去检查这个对象的实例类, 看看实例类中有没有重写这个虚函数, 如果有的话就直接执行该函数, 否则就去找这个实例类的父类, 看看他的父类中有没有重写这个虚函数,有的话就执行, 没有的话就继续找直到找遍所有父类, 如果没有override关键字, 最后会执行申明类里的虚函数.

例子:

public class GoodClass
    {
        public virtual void GoodFunc()
        {
            Console.WriteLine("This is a good function!!!");
        }
    }

    public class NiceClass : GoodClass
    {
        public override void GoodFunc()
        {
            Console.WriteLine("This is a nice function");
        }
    }
    public class start
    {
        public void main()
        {
            GoodClass gc = new GoodClass();
            gc.GoodFunc();
            GoodClass nc = new NiceClass();
            nc.GoodFunc();
        }
    }
This is a good function!!!
This is a nice function
————————————————
public class GoodClass
    {
        public virtual void GoodFunc()
        {
            Console.WriteLine("This is a good function!!!");
        }
    }

    public class NiceClass : GoodClass
    {
        public override void GoodFunc()
        {
            Console.WriteLine("This is a nice function");
        }
    }
    
    public class GreatClass : NiceClass{}
    public class start
    {
        public void main()
        {
            GoodClass gc = new GreatClass();
            gc.GoodFunc();
        }
    }
    This is a nice function
————————————————
                        
原文链接:https://blog.csdn.net/lx2054807/article/details/102703775

[展开全文]

虚方法  virtual  把需要重写的方法返回值前加vierual         

重写  override

 

隐藏方法

[展开全文]

base只能访问父类里面的值

this只能访问子类里面的值

虚方法:

方法重写:

父类:virtual

子类:override

  

[展开全文]

创建子类对象的方式

1.Boss b1=new boss();

2.Enemy b2=new boss();

第二种方式创建时,默认使用的方法是父类的,当使用了virtua虚方法的时候,使用的方法是子类的 

可以把子类赋值给父类。但是不能把父类赋值给子类(子类的要求更高)

例如  Enemy enemy=new boss();        对的

          Boss b = new Enemy;          错误

构造的子类对象赋值给父类声明的对象,本质还是子类的对象,但是父类声明的,子类里的方法不能使用

重写函数的办法

1.虚方法

在Enemy中

pubilc virtual void Move()

在boss类中

(输入override会有提示)

public override void Move()

{

base.Move();//和父类相同

}

2.隐藏方法、

[展开全文]

虚函数的功能,当父类接收子类时,父类实例调用虚函数,程序会先看子类是否对虚函数重写,如果重写了,就会调用子类的函数

[展开全文]

子类重写父类的方法。

 

父类类型的对象 接收子类类型, java种的多态。

 

重写父类方法的两种形式: 

1、 虚方法:

虚方法的使用场景: 子类需要重写父类已有的方法

定义: 父类的方法 使用 virtual关键字进行修饰, 子类重写的方法使用override 关键字进行重写。

在调用虚函数的时候会检查子类有没有重写该虚函数。

 

 

2、 隐藏方法:

[展开全文]

   // public override void Exam()    重写父类(基类)的方法
        //public new void Exam()   new 关键字可以显式隐藏从(父类)基类继承的成员。

[展开全文]

重写:

父类:virtual

子类:override

[展开全文]

父类声明 子类构造函数,生成的对象为子类对象。不要这么写吧

[展开全文]

授课教师

问问题加入A计划,有专门负责答疑的老师哦!!!

课程特色

下载资料(1)
视频(60)