使用base关键字可以帮助子类显示地调用父类的构造函数。对于这点,我们可以使用前文所给的实例代码(有裁剪)来进行说明,具体代码如下:

//父亲类
public class FatherClass
{public FatherClass(){Console.WriteLine("FatherClass Constructor:FatherClass()");}public FatherClass(string from){Console.WriteLine("FatherClass Constructor:FatherClass({0})", from);}
}//小霸王类,我是小霸王,腰里别只鸡
public class MeClass : FatherClass
{public MeClass(){Console.WriteLine("MeClass Constructor:MeClass()");}public MeClass(string from): base(from){Console.WriteLine("MeClass Constructor:MeClass({0})", from);}
}static void Main(string[] args)
{//类实例化,含参数string from = "tiana0";Console.WriteLine("类实例化,调用有参构造函数:");MeClass me1 = new MeClass(from);
}

运行程序,结果如下:

代码分析:

代码中定义了子类MeClass 及父类FatherClass,子类和父类均包含两个构造函数:一个无参构造函数和一个有参构造函数。在对子类MeClass 进行实例化时,会调用该类的有参构造函数,该构造函数的声明中包含了“: base(from)”,这将告诉编译器子类需要显式地去调用父类的有参构造函数

那么我们去掉“: base(from)”,结果又会怎样呢?

去掉“: base(from)”,再次运行程序,结果如下:

很显然,在子类被实例化时,调用的是父类的无参构造函数。这是编译器的自作主张而已,也就是说,子类若不显式的调用父类的构造函数时,编译器会自动调用父类的无参构造函数。这些,在文章《C#类继承中构造函数用法小结 》有详细说明,有不解之处,可以去查阅。

除了这点,那么base关键字还有其他什么用处吗?

答案是肯定的。使用base关键字可以帮助子类调用基类上已被其他方法重写的方法

对于这点,我们给出下面的实例代码:

//父亲类
public class FatherClass//:GrandfatherClass
{protected string strFather = "I'm your father,gay!";public virtual void ShowInfo(){Console.WriteLine("{0}", strFather);}
}//小霸王类,我是小霸王,腰里别只鸡
public class MeClass : FatherClass
{private string strMe = "I'm your son,gay!";public override void ShowInfo(){Console.WriteLine("{0}", strMe);}
}static void Main(string[] args)
{//类实例化Console.WriteLine("类实例化,调用无参构造函数:");MeClass me = new MeClass();me.ShowInfo();
}

代码运行结果为:

代码分析:

代码中,父类定义了虚方法ShowInfo,用来输出字符串"I'm your father,gay!",子类重写了父类方法ShowInfo,用来输出字符串"I'm your son,gay!",在子类实例化后,调用方法ShowInfo,输出了字符串"I'm your son,gay!"。这时,你发现,父类的方法ShowInfo不再被使用了。那么我们要是想在子类中使用父类的这个被重写方法,又该怎么办呢?(哥们,还在故弄玄虚啊)很明显使用base关键字了。我们稍稍修改代码,如下:

//小霸王类,我是小霸王,腰里别只鸡
public class MeClass : FatherClass
{private string strMe = "I'm your son,gay!";public override void ShowInfo(){Console.WriteLine("{0}", strMe);}public void ShowFatherInfo(){base.ShowInfo();}
}static void Main(string[] args)
{//类实例化Console.WriteLine("类实例化,调用无参构造函数:");MeClass me = new MeClass();//me.ShowInfo();me.ShowFatherInfo();
}

父亲类代码不做任何修改。

上面的代码在前面代码的基础上,为子类增加了方法ShowFatherInfo,在该方法中使用代码“base.ShowInfo();”来显式调用父类被重写的方法ShowInfo来输出字符串"I'm your father,gay!",接着对子类进行实例化并调用新方法ShowFatherInfo,这次终于输出了字符串"I'm your father,gay!",不信,那就看结果。

呵呵,儿子终于变成了老子,老子信了你的邪。(博主看龙门,看出毛病来了,请见谅)

到这里,base关键字的主要作用,已基本讲完。

最后,补充一点,那就是:从静态方法中使用 base 关键字是错误的。(msdn)

对于这点,就不举例说明了,下面展开this关键字的介绍。

c#_关键字base相关推荐

  1. 数据库_关键字的使用

    数据库_关键字的使用 1.as关键字 作用:给表的字段和表设置别名(as关键字可以省略) 2.distinct关键字 作用:去除重复的数据行

  2. 关键字 base 的作用

    ①调用基类上已被其他方法重写的方法,小栗子a如下: public class Father{public virtual void Show(){Console.WriteLine(" I ...

  3. [你必须知道的.NET] 第六回:深入浅出关键字---base和this

    本文将介绍以下内容: 面向对象基本概念 base关键字深入浅出 this关键字深入浅出 1. 引言 new关键字引起了大家的不少关注,尤其感谢Anders Liu的补充,让我感觉博客园赋予的交流平台真 ...

  4. Web前端学习笔记11:JavaScript_注释_输入输出_变量_数据类型_关键字_保留字_运算符_流程控制

    文章目录 JavaScript基础第01天 1 - 编程语言 1.1 编程 1.2 计算机语言 1.3 编程语言 1.4 翻译器 1.5 编程语言和标记语言区别 总结 2 - 计算机基础 2.1 计算 ...

  5. Robot_Framework:基础_关键字

    资源文件 1.测试套件主要是存放测试案例的,而资源文件主要就是用来存放用户关键字的的 2.在实际的项目测试过程中,往往需要创建许多这样的具有通用性的用户关键字.且不希望这些关键字依附于某个测试套件,甚 ...

  6. java 循环关键字_Java循环结构_常量_关键字

    一.循环 定义:当满足一定条件的时候,重复执行某一段代码的操作 while.for.do...while是Java的循环 二.While循环 语法格式: int i = 0://初始化值 while( ...

  7. qt listwidget 关键字颜色_关键字排名优化工具方案

    关键字排名j67745优化工具方案,企业经常采用SEO优化,以获得更好的排名和更好的流量自己的网站.搜索引擎优化有哪些方法?或者什么更有效? 北京seo优化如何稳定网站排名,seo优化首先需要做好内容 ...

  8. java三种循环结构的关键字,Java循环结构_常量_关键字

    语法格式: int i = 0://初始化值 while(i<10){ //循环判断 ​循环体 循环重复执行的代码 ​循环控制语句 } 解析While循环 初始化条件[定义初始变量.只执行一次] ...

  9. python-双向循环_关键字pass_break_continue_for循环

    1.if 判断 和 while 循环 练习 1.提示户输入马化腾. 判断用户输入的对不对. 如果对, 提示真聪明, 如果不对, 提醒该充值了 name = input("谁是中国人民当中最能 ...

最新文章

  1. 未来,大脑扫描背包将神经科学带入现实世界
  2. OpenSSL“心脏出血”漏洞爆发和修复方法
  3. malloc 背后的系统知识(虚拟内存地址)
  4. Spring学习(八)AOP详解
  5. Android注册会员系统返回上一步时如何保存信息
  6. python manager是进程安全的么_Python在进程之间共享锁
  7. python中变量和函数的区别_关于python中带下划线的变量和函数 的意义
  8. vue render函数
  9. POJ2184 Cow Exhibition(DP:变种01背包)
  10. P3203-[HNOI2010]弹飞绵羊【分块】
  11. Matlab对图像进行鼠标取点操作及K值聚类分析
  12. Windows Store App 图像
  13. 在Windos上安装Nginx
  14. 详解验证码与打码平台的攻防对抗
  15. 甲骨文裁员犯的病,任正非早在10年前就开出了药方
  16. kodi资源_安装Kodi展示播放NAS电影
  17. linux定时对准时间,Linux校对时间
  18. 高速PCB设计系列基础知识67 | 尺寸与公差标注内容与通用知识
  19. ATM机多账号的实现
  20. 渲大师携手向日葵,远控赋能云渲染及GPU算力服务

热门文章

  1. Vivado使用误区与进阶——XDC约束技巧之I/O篇 (下)
  2. 如何阅读 Vivado中的Timing Report
  3. 几种常见窗函数及其MATLAB程序实现
  4. FPGA SelectMap接口配置设计
  5. localparam和parameter的区别
  6. c语言中很多中括号由外向里,浅谈C语言中的类型声明
  7. 计算机主机组装的过程,电脑主机组装需要怎样的操作流程简单至极?
  8. 垃圾邮件过滤 php,垃圾邮件过滤功能
  9. Office中如何实现公式颜色的更改?
  10. python写入csv文件的几种方法