本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下:

public class Person
{public Person(){Console.WriteLine("我是人");}
}
public class Student : Person
{public Student(){Console.WriteLine("我是学生");}
}

在客户端通过子类无参构造函数创建子类实例。

class Program
{static void Main(string[] args){Student student = new Student();Console.ReadKey();}
}

输出结果:

我是人
我是学生

可见:通过调用子类无参构造函数创建子类实例,会默认调用父类无参构造函数。
如果把父类的无参构造函数去掉,会怎样呢?

–结果会报"Person不包含0个参数的构造函数"错。

二、通过子类有参构造函数创建子类实例

再同时为子类和父类添加有参构造函数。

public class Person
{public Person(){Console.WriteLine("我是人");}public Person(string name){Console.WriteLine("我是人,我的名字叫{0}", name);}
}
public class Student : Person
{public Student(){Console.WriteLine("我是学生");}public Student(string name){Console.WriteLine("我是学生,我的名字叫{0}", name);}
}

在客户端通过子类有参构造函数创建子类实例。

Student student = new Student("小明");
Console.ReadKey();

输出结果:输出结果:

我是人
我是学生,我的名字叫小明

可见:通过调用子类有参构造函数,同样默认会调用父类无参构造函数。

三、在子类中明确指出调用哪个父类构造函数

以上,默认调用了父类的无参构造函数,但如何调用父类的有参构造函数呢?

–在子类中使用base

在子类Student中的有参构造函数中使用base,明确调用父类有参构造函数。

public class Student : Person
{public Student(){Console.WriteLine("我是学生");}public Student(string name): base(name){Console.WriteLine("我是学生,我的名字叫{0}", name);}
}

客户端

Student student = new Student("小明");
Console.ReadKey();

输出结果:

我是人,我的名字叫小明
我是学生,我的名字叫小明

四、通过子类设置父类的公共属性

在父类Person中增加一个Name公共属性,并在父类的构造函数中对Name属性赋值。

public class Person
{public string Name { get; set; }public Person(){Console.WriteLine("我是人");}public Person(string name){this.Name = name;Console.WriteLine("我是人,我的名字叫{0}", name);}
}

在客户端:

Student student = new Student("小明");
Console.WriteLine("子类获取父类的Name属性值为{0}", student.Name);
Console.ReadKey();

输出结果:

我是人,我的名字叫小明
我是学生,我的名字叫小明
子类获取父类的Name属性值为小明

以上代码的执行路径是:

  • →调用子类有参构造函数,并把该参数传值给父类有参构造函数
  • →调用父类有参构造函数,并给父类公共属性Name赋值
  • →子类实例调用父类的公共属性

其实,以上的做法在分层架构设计中已经得到了很好的使用。在分层架构中,通常会为所有的Repository创建一个基类,在基类中设计一个代表当前Repository的属性,并在基类的构造函数中为该属性赋值;最终,在创建子类Repository实例时,在为基类的、代表当前Repository的公共属性赋值。
在子类中,当父类通过base拿到子类的参数时,还可以对该参数做一些处理,比如代表父类的base把从子类拿到的参数转换成大写。

public class Student : Person
{public Student(){Console.WriteLine("我是学生");}public Student(string name): base(ConvertToUpper(name)){Console.WriteLine("我是学生,我的名字叫{0}", name);}private static string ConvertToUpper(string name){return name.ToUpper();}
}

输出结果:

我是人,我的名字叫DARREN
我是学生,我的名字叫darren
子类获取父类的Name属性值为DARREN

总结:
①.通过子类无参构造函数创建子类实例,会默认调用父类的无参构造函数
②.通过子类有参构造函数创建子类实例,也会默认调用父类的无参构造函数
③.在子类构造函数中通过base关键字指明父类构造函数,当通过子类构造函数创建实例,会调用指明的、父类的构造函数
④.父类的公共属性可以通过子类来赋值,子类也可以获取到父类的公共属性

C#中子类调用父类的实现方法相关推荐

  1. python中子类调用父类的初始化方法

    http://bestchenwu.iteye.com/blog/1044848 http://www.crazyant.net/1303.html 一直不太理解python的初始化方法,今天找了下资 ...

  2. python子类如何调用父类方法_python中子类调用父类函数的方法示例

    前言 本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类中的__init__()函数会覆盖父类的函数,一些情况往往需要在子类里调用父类函数.下面话不多说了,来一起看看详 ...

  3. c++中子类调用父类方法的方法

    在c++中子类调用父类方法的方法和java所用的方式不一样, java使用super指针就可以调用,c++中虽然也有this指针,但是不能用super去调用父类方法. c++用的方法为:fatherC ...

  4. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  5. 子类调用父类的同名方法和属性

    Python面向对象中,利用子类调用父类的同名方法和属性. 首先我们定义了两个父类,Master和School # @author: 北山啦 # FileName: 12子类调用父类的同名方法 # @ ...

  6. JavaScript中子类调用父类方法的实现

    一.前言 最近在项目中,前端框架使用JavaScript面向对象编程,遇到了诸多问题,其中最典型的问题就是子类调用父类(super class)同名方法,也就是如C#中子类中调用父类函数base.** ...

  7. python中的继承的初始化_python中子类继承父类的__init__方法实例

    前言 使用Python写过面向对象的代码的同学,可能对__init__方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行.这个方法可以用来对你的对象做一些你希望的 初始化 . 注 ...

  8. 关于Java中子类调用父类方法

    当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性.  如果 ...

  9. 为什么Servlet程序的init(ServletConfig config)中需要调用父类的init方法

    说明:本文代码测试于:idea2018; tomcat 9.0 当我们通过IDEA自动生成init(ServletConfig config)方法时,默认创建一句调用父类init()方法的语句 @Ov ...

最新文章

  1. [笔记]解决m2eclipse给项目添加maven依赖管理时可能不给项目的build path...
  2. PHP在各种HTTP服务器上运行模式分析
  3. POJ - 3635 Full Tank?(bfs)
  4. 查看某个端口是否链接超时
  5. 163邮箱有传真服务器,网易企业邮箱邮件传真功能使用说明
  6. ASP.NET(C#)获取客户端的网卡MAC代码
  7. 在Linux上进行动态注入 | LD_PRELOAD
  8. 47 - 算法 - 记住常用位运算-Leetcode-136-只出现一次的数字
  9. 高质量C /C编程指南---序言
  10. iOS 4中禁止程序退出后保留在后台的方法
  11. Unfolder使用教程:如何插入,删除和更新对象
  12. mysql查看表注释和字段注释
  13. URL在线编码/解码工具
  14. dell2900服务器做系统,dell2900如何重装系统
  15. java 正则拼音_正则匹配拼音
  16. steamcommunity 本地 443端口被占用解决方案
  17. 力扣242.有效的字母异位词(Java语言,排序法、散列表法)
  18. 图元和片元_顶点(vertexs) 图元(primitives) 片元(fragments片断) 像素(pixels)...
  19. matlab访问被拒绝,安装MATLAB拒绝访问问题的解决方法
  20. 奇异谱分解轴承故障诊断代码编写

热门文章

  1. Matlab 红绿灯识别系统
  2. 常见的室内人员定位及时之一,ZigBee定位-新导智能
  3. 线性代数(8): 生成空间与空间的基
  4. STM32 RTC例程
  5. VLC多媒体播放器将字幕srt等 内嵌在视频中且能合并到视频,保存为带字幕的新视频 自媒作首选工具
  6. 【兼容性测试】21个兼容性测试需要注意的测试点
  7. ubuntu 改屏幕分辨率命令_如何使用Ubuntu命令行更改屏幕分辨率?
  8. 从“AI原生云”,看智能经济时代的新型数字底座
  9. 天线为什么会有多次谐振_天线谐振是怎么回事?
  10. 计算机网络专业英语pdf,计算机网络专业英语词汇