C#中子类调用父类的实现方法
本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下:
一、通过子类无参构造函数创建子类实例
创建父类Person和子类Student。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Person { public Person() { Console.WriteLine( "我是人" ); } } public class Student : Person { public Student() { Console.WriteLine( "我是学生" ); } } |
在客户端通过子类无参构造函数创建子类实例。
1
2
3
4
5
6
7
8
|
class Program { static void Main( string [] args) { Student student = new Student(); Console.ReadKey(); } } |
输出结果:
1
2
|
我是人 我是学生 |
可见:通过调用子类无参构造函数创建子类实例,会默认调用父类无参构造函数。
如果把父类的无参构造函数去掉,会怎样呢?
--结果会报"Person不包含0个参数的构造函数"错。
二、通过子类有参构造函数创建子类实例
再同时为子类和父类添加有参构造函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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); } } |
在客户端通过子类有参构造函数创建子类实例。
1
2
|
Student student = new Student( "小明" ); Console.ReadKey(); |
输出结果:
1
2
|
我是人 我是学生,我的名字叫小明 |
可见:通过调用子类有参构造函数,同样默认会调用父类无参构造函数。
三、在子类中明确指出调用哪个父类构造函数
以上,默认调用了父类的无参构造函数,但如何调用父类的有参构造函数呢?
--在子类中使用base
在子类Student中的有参构造函数中使用base,明确调用父类有参构造函数。
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Student : Person { public Student() { Console.WriteLine( "我是学生" ); } public Student( string name) : base (name) { Console.WriteLine( "我是学生,我的名字叫{0}" , name); } } |
客户端
1
2
|
Student student = new Student( "小明" ); Console.ReadKey(); |
输出结果:
1
2
|
我是人,我的名字叫小明 我是学生,我的名字叫小明 |
四、通过子类设置父类的公共属性
在父类Person中增加一个Name公共属性,并在父类的构造函数中对Name属性赋值。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Person { public string Name { get ; set ; } public Person() { Console.WriteLine( "我是人" ); } public Person( string name) { this .Name = name; Console.WriteLine( "我是人,我的名字叫{0}" , name); } } |
在客户端:
1
2
3
|
Student student = new Student( "小明" ); Console.WriteLine( "子类获取父类的Name属性值为{0}" , student.Name); Console.ReadKey(); |
输出结果:
1
2
3
|
我是人,我的名字叫小明 我是学生,我的名字叫小明 子类获取父类的Name属性值为小明 |
以上代码的执行路径是:
→调用子类有参构造函数,并把该参数传值给父类有参构造函数
→调用父类有参构造函数,并给父类公共属性Name赋值
→子类实例调用父类的公共属性
其实,以上的做法在分层架构设计中已经得到了很好的使用。在分层架构中,通常会为所有的Repository创建一个基类,在基类中设计一个代表当前Repository的属性,并在基类的构造函数中为该属性赋值;最终,在创建子类Repository实例时,在为基类的、代表当前Repository的公共属性赋值。
在子类中,当父类通过base拿到子类的参数时,还可以对该参数做一些处理,比如代表父类的base把从子类拿到的参数转换成大写。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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(); } } |
输出结果:
1
2
3
|
我是人,我的名字叫DARREN 我是学生,我的名字叫darren 子类获取父类的Name属性值为DARREN |
总结:
①.通过子类无参构造函数创建子类实例,会默认调用父类的无参构造函数
②.通过子类有参构造函数创建子类实例,也会默认调用父类的无参构造函数
③.在子类构造函数中通过base关键字指明父类构造函数,当通过子类构造函数创建实例,会调用指明的、父类的构造函数
④.父类的公共属性可以通过子类来赋值,子类也可以获取到父类的公共属性
相信通过本文上述实例的分析,可以加深大家对C#类的初始化与继承的理解。希望本文所述对大家进一步的学习C#程序设计有所帮助。
C#中子类调用父类的实现方法的更多相关文章
- python中子类调用父类的方法
1子类调用父类构造方法 class Animal(object): def __init__(self): print("init Animal class~") def run( ...
- JavaScript中子类调用父类方法的实现
一.前言 最近在项目中,前端框架使用JavaScript面向对象编程,遇到了诸多问题,其中最典型的问题就是子类调用父类(super class)同名方法,也就是如C#中子类中调用父类函数base.** ...
- 关于Java中子类调用父类方法
当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性. 如果该 ...
- [转]Java中子类调用父类构造方法的问题分析
在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下: 当你new一个子类对象的时候,必须首先要new一个 ...
- python 子类调用父类成员的方法
1.直接写类名调用: parent_class.parent_attribute(self) class Animal(): def __init__(self, name): self.name = ...
- java继承-子类调用父类的方法中包含子类重写的方法
# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了... # 先看代码: public class Common { public static void main(String[] args ...
- 在C++中子类继承和调用父类的构造函数方法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...
- python子类调用父类的方法
python子类调用父类的方法 python和其他面向对象语言类似,每个类可以拥有一个或者多个父类,它们从父类那里继承了属性和方法.如果一个方法在子类的实例中被调用,或者一个属性在子类的实例中被访问, ...
- 【转】子类会调用父类的@PostConstruct方法
如果一个类用@Service或@Component,那么只需要用@PostConstruct修饰某个方法,该方法能在类实例化的过程中自动执行,相当于类的构造函数.同时,具备了构造函数不具备的功能. @ ...
随机推荐
- Don't Repeat Yourself (不要重复你自己)
DRY是指Don't Repeat Yourself特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性.简洁性,并且可能导致代码之间的矛盾.<The Pragmatic Programm ...
- 【转】Dancing Links精确覆盖问题
原文链接:http://sqybi.com/works/dlxcn/ (只转载过来一部分,全文请看原文,感觉讲得很好~)正文 精确覆盖问题 解决精确覆盖问题 舞蹈步骤 效率分析 ...
- linux 下网站压力测试工具webbench
一直在用webbench ,这个linux下的网站压力测试工具.整理下. 笔记本装的ubuntu,其他linux系统也差不多. webbench 需要先安装 ctags,一个vim的阅读插件,可以直接 ...
- iOS开发——动画篇Swift篇&常用动画总结
UIView动画: UIView动画时最基本的动画,是直接对我们界面上控件进行简单的动画效果实现,如果你只需要用到一些简单的效果,那么这个很适合你,关于UIView动画实现恨简单, UIKit直接将动 ...
- Android数据的四种存储方式之SQLite数据库
Test.java: /** * 本例解决的问题: * 核心问题:通过SQLiteOpenHelper类创建数据库对象 * 通过数据库对象对数据库的数据的操作 * 1.sql语句方式操作SQLite数 ...
- VBA Excel 常用 自定义函数
1. 将 互换 Excel 列号(数字/字母) Public Function excelColumn_numLetter_interchange(numOrLetter) As String Dim ...
- VBA Excel 引用 API,以实现“透明”
1. 引用 API 函数 ' API函数Public Declare Function FindWindow Lib "user32" Alias "FindWindow ...
- Matrix 二维树状数组的第二类应用
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17976 Accepted: 6737 Descripti ...
- SimpleAliasRegistry implements AliasRegistry
Spring - 4.2.3 // name,alias存储容器 ConcurrentHashMap <alias,name>private final Map<String, St ...
- Spring与Hibernate、Mybatis整合
在Web项目中一般会把各个web框架结合在一起使用,比如spring+hibernate,spring+ibatis等,如此以来将其他的框架整合到spring中来,便有些少许的不便,当然spring已 ...