c#函数覆盖、隐藏、重载个人总结

(一)在子类中使用new时,隐藏了父类同型函数,如果不用new编译器报警告。隐藏的效果是调用申明类型的函数定义执行,如:

class A

{

void Fun();

}

class B:A

{

new void Fun();

}

A a = new B();

A为申明类型,B为实例类型,则a.Fun()执行A.Fun(),如申明为B b = new B(); b.Fun()执行B.Fun();

无论父类函数是否有virtual修饰符,以上效果不变。

(二)override重写关键字必须与基类中virtual, abstract 或override使用,不可直接使用,否则编译报错。override效果是覆盖父类同型函数,覆盖的效果是执行实例类型的函数定义,如:

无论申明为A a = new B(),还是B b = new B(), 均执行B.Fun();

A为申明类型,B为实例类型,则a.Fun()执行A.Fun(),如申明为B b = new B(); b.Fun()执行B.Fun();

无论隐藏还是覆盖父类函数,均可以采用在子类中执行base.Fun()调用父类函数。

(三)重载发生在同一个类中同名不同型函数中。

(四)virtual函数可以执行,abstract类似于纯虚函数(pure virtual)不可执行,必须声明在抽象类中,否则编译报错;须在子类中实现才可以执行,而且必须实现,否则编译报错。由于抽象类不可实例化,所以只能执行子类的函数定义。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值