C#中子类调用父类的实现方法
本文实例讲述了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#中子类调用父类的实现方法相关推荐
- python中子类调用父类的初始化方法
http://bestchenwu.iteye.com/blog/1044848 http://www.crazyant.net/1303.html 一直不太理解python的初始化方法,今天找了下资 ...
- python子类如何调用父类方法_python中子类调用父类函数的方法示例
前言 本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类中的__init__()函数会覆盖父类的函数,一些情况往往需要在子类里调用父类函数.下面话不多说了,来一起看看详 ...
- c++中子类调用父类方法的方法
在c++中子类调用父类方法的方法和java所用的方式不一样, java使用super指针就可以调用,c++中虽然也有this指针,但是不能用super去调用父类方法. c++用的方法为:fatherC ...
- 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例
前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...
- 子类调用父类的同名方法和属性
Python面向对象中,利用子类调用父类的同名方法和属性. 首先我们定义了两个父类,Master和School # @author: 北山啦 # FileName: 12子类调用父类的同名方法 # @ ...
- JavaScript中子类调用父类方法的实现
一.前言 最近在项目中,前端框架使用JavaScript面向对象编程,遇到了诸多问题,其中最典型的问题就是子类调用父类(super class)同名方法,也就是如C#中子类中调用父类函数base.** ...
- python中的继承的初始化_python中子类继承父类的__init__方法实例
前言 使用Python写过面向对象的代码的同学,可能对__init__方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行.这个方法可以用来对你的对象做一些你希望的 初始化 . 注 ...
- 关于Java中子类调用父类方法
当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性. 如果 ...
- 为什么Servlet程序的init(ServletConfig config)中需要调用父类的init方法
说明:本文代码测试于:idea2018; tomcat 9.0 当我们通过IDEA自动生成init(ServletConfig config)方法时,默认创建一句调用父类init()方法的语句 @Ov ...
最新文章
- [笔记]解决m2eclipse给项目添加maven依赖管理时可能不给项目的build path...
- PHP在各种HTTP服务器上运行模式分析
- POJ - 3635 Full Tank?(bfs)
- 查看某个端口是否链接超时
- 163邮箱有传真服务器,网易企业邮箱邮件传真功能使用说明
- ASP.NET(C#)获取客户端的网卡MAC代码
- 在Linux上进行动态注入 | LD_PRELOAD
- 47 - 算法 - 记住常用位运算-Leetcode-136-只出现一次的数字
- 高质量C /C编程指南---序言
- iOS 4中禁止程序退出后保留在后台的方法
- Unfolder使用教程:如何插入,删除和更新对象
- mysql查看表注释和字段注释
- URL在线编码/解码工具
- dell2900服务器做系统,dell2900如何重装系统
- java 正则拼音_正则匹配拼音
- steamcommunity 本地 443端口被占用解决方案
- 力扣242.有效的字母异位词(Java语言,排序法、散列表法)
- 图元和片元_顶点(vertexs) 图元(primitives) 片元(fragments片断) 像素(pixels)...
- matlab访问被拒绝,安装MATLAB拒绝访问问题的解决方法
- 奇异谱分解轴承故障诊断代码编写
热门文章
- Matlab 红绿灯识别系统
- 常见的室内人员定位及时之一,ZigBee定位-新导智能
- 线性代数(8): 生成空间与空间的基
- STM32 RTC例程
- VLC多媒体播放器将字幕srt等 内嵌在视频中且能合并到视频,保存为带字幕的新视频 自媒作首选工具
- 【兼容性测试】21个兼容性测试需要注意的测试点
- ubuntu 改屏幕分辨率命令_如何使用Ubuntu命令行更改屏幕分辨率?
- 从“AI原生云”,看智能经济时代的新型数字底座
- 天线为什么会有多次谐振_天线谐振是怎么回事?
- 计算机网络专业英语pdf,计算机网络专业英语词汇