C# 子类实例化基类 基类使用不了子类的方法_C#继承、构造方法的执行过程、隐藏基类方法、装箱与拆箱...

1.继承

继承具有单一性,也就是说一个类只能有一个直接的父类。(就类似人类只能有一个亲生父亲一样)。

多个类可以继承同一个父类。(就类似人类一个父亲可以有多个子女)。

多层继承是可以的,即一个类的父类可以再去继承其他类,例如C类继承自B类,B类又继承自A类。这时C类也可以称作A类的子类。

简而言之就是说,继承的意思是:编写一个新类时可以通过继承一个类的方式类自动拥有该类中的所有成员,除了构造方法,和析构函数

继承一个类就在你创建一个新类的时候在类名后面 加个冒号然后写上你要继承的父类名就可以了

using 

2.继承时构造方法的执行过程

继承时构造方法的执行过程就是在对象在被创建时(即实例化对象时),它先去调用父类的构造方法,然后再去调用自己的构造方法。所以的它执行步骤就是

1.实例化对象

2.调用父类的构造方法

3.调用自身的构造方法

using 

64076e9c266aad5aa2458caff157f313.png

如果说父类又两个构造方法,一个是无参的构造方法,还有一个是有参的构造方法,默认是调用无参的构造方法,但是如果说我们想让系统调用有参的构造方法,就需要在子类的构造方法后面加上:base(参数名)

using 

c008ae492e361261460987993ec338e5.png

3.隐藏基类方法

子类在继承父类是可以对父类的成员进行扩展,如果子类和父类中出现同名的方法,那么编译器可能会不明确你要调用的是那个父类的方法还是子类的方法,所以为了解决这个问题,你就可以在子类的同名方法中加上关键词new,就可以默认调用子类的方法,从而隐藏了父类的方法

b91b070cce65fbfbc5b21f5ee121a28c.png

这里的话下面就有了警告

using 

2a9825688f63e789aaa9f240a227d715.png
Console.WriteLine("狗在叫!");

8713257bdfc038640414fe6db55b0042.png
base.Shout();

4.装箱与拆箱

在实际开发中,某些方法的参数类型是引用类型,但是如果调用时传入的是值类型,此时需要装箱操作。同样当一个方法返回值类型是引用类型,但用来接收返回值的变量为值类型,那么就需要拆箱操作。

简单的来说,装箱就是将值类型转换为引用类型,拆箱就是将引用类型转换为值类型

值类型是被分配在栈上,变量包含变量实例,使用效率高,引用类型是被分配在托管堆,变量包含实例的指针,通过此指针引用其实例。引用类型的性能要比值类型差很多,因此要尽量使用值类型,少用引用类型。

装箱和拆箱的本质就是数据存储在栈与堆的变更,因此频繁进行装箱和封箱操作会影响运算效率,特别是装箱操作,所以要减少相关操作

减少装箱的相关操作有1,尽量将装箱操作放置循环体外。2.通过重载方法,接口,或泛型来避免装箱和拆箱操作

namespace 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值