新手C#常见错误_base,new关键字使用

大家好,我是华山自控编程朱老师

前几天一个学员在学习c#使用base关键字时。一直不理解base输出的值为什么不是父类的100,

而是输出了11:程序输出结果如下:

不知道什么原因。 程序代码截图如下:

其实很多初学者在使用base关键字时,都会碰到这样问题:以为调用了base关键字时,就要输出父类的数据。下面我们就对这个问题进行详细分析。

问题分析:

这个代码第25行,this.a =a可以看出,在子类B并没有重新定义变量a,而是直接引用变量a,通过构造函数重新赋值。那么通过 "变量先定义,后赋值的逻辑",这个变量a就是父类的变量a.它和父类的变量a就是同一个。指向的是同一个内存地址。所以,这个时候,我们在子类中通过base.a使用的变量就是父类的变量。至于输出的值为什么不是父类的100,而是11呢?其实在子类构造函数中给变量a重新赋值后,这个时候,父类的变量a的值已经是11,在也不是初始值100了。因为子类修改的数据就是父类的变量a的数据。

那么有同学可能会问,如果我想在子类中输出父类的变量a的初始值100,该怎么实现呢?问的非常好。这里我们只需要通过一个关键字new就可以轻松实现。在继承类B中通过关键字new重新定义相同的变量a:代码截图如下:


再次运行程序, 输出结果如下:

以上就是basenew关键字及继承特性的一些基本使用和总结,另外在延伸下相关的知识点:

base:用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器中。

MSDN中小结的具体功能包括:

(1)调用基类上已被其他方法重写的方法。

(2)指定创建派生类实例时应调用的基类构造函数。

base常用于,在派生类对象初始化时和基类进行通信。 base可以访问基类的公有成员和受保护成员,私有成员是不可访问的。

tip:在多层的继承中,base可以指向的父类的方法有两种,一是有重载的情况下,base直接指向继承的父类成员的方法,二是没有重载存在的情况下,base可以指向任何上级父类的公有或受保护的方法。(好像是构造方法)

以上就是初学者在学习c#使用base,new关键字时常见的问题。总结如下:

1:base关键字访问的是父类的成员。可以在子类中修改父类的属性。

2:new关键字可以在子类中重新定义父类的相同属性。重新分配新的内存空间。

点击领取上位机编程全套入门教程+工具

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华山自控编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值