C#子类如何调用父类
C#中子类是如何调用父类的?带着这个问题,体验如下:
□ 通过子类无参构造函数创建子类实例
创建父类Person和子类Student。
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#子类如何调用父类的更多相关文章
- 【转】子类会调用父类的@PostConstruct方法
如果一个类用@Service或@Component,那么只需要用@PostConstruct修饰某个方法,该方法能在类实例化的过程中自动执行,相当于类的构造函数.同时,具备了构造函数不具备的功能. @ ...
- 通过supper()有参构造器,完成子类对象调用父类属性的方法,并完成赋值
package com.Summer_0426.cn; /** * @author Summer * 通过supper()有参构造器,完成子类对象调用父类属性的方法,并完成赋值 * */ public ...
- 在子类中调用父类的方法super
1.没有super之前,在子类里面需要父类里面的逻辑,但是我们是通过派生(自己定义了一个init,增加了一条line) class vehichle:#定义一个交通工具的类 Country=" ...
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- Java子类初始化调用父类无参构造
实在是服了自己,子类初始化调用父类无参构造这种初学者都应该知道的事,我给忘了. 记得当初看书的时候各种概念抄在笔记本上,再上机实践,以为一辈子都不会忘,还是给忘了. 这件事说明了两个问题: 1.我没有 ...
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,在pyth ...
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...
- c++与java中子类中调用父类成员的方法
java中: import java.util.Scanner; public class ClassTest{ public static void main(String args[]){ chi ...
- 【Python】Python中子类怎样调用父类方法
python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类, ...
随机推荐
- (六)MyBatis杂项
第一节:处理CLOB.BLOB类型数据 第二节:传入多个输入参数 第三节:MyBatis分页 1,逻辑分页 2,物理分页 MyBatis默认情况下,MyBatis启用一级缓存,即同一个SqlSessi ...
- html meta标签使用总结(转)
之前学习前端中,对meta标签的了解仅仅只是这一句. <meta charset="UTF-8"> 但是打开任意的网站,其head标签内都有一列的meta标签.比如我博 ...
- WORDPRESS登录后台半天都无法访问或者是访问慢的解决方法
wordpress登录后台如果打开速度慢,一般分为两部分,第一部分是php虚拟主机的原因,其中主机的原因,又分为很多种情况.第二部分就是WordPress程序本身的问题.这里无忧主机小编主要是讲第二部 ...
- 一步一步学习IdentityServer4 (5) .NETCore2.0 Swagger
首先添加nuget: Swashbuckle.AspNetCore services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new ...
- HBase(四)HBase集群Shell操作
一.进入HBase命令行 在你安装的随意台服务器节点上,执行命令:hbase shell,会进入到你的 hbase shell 客 户端 [admin@node21 ~]$ hbase shell S ...
- ASP.NET:插件化机制
概述 nopCommerce的插件机制的核心是使用BuildManager.AddReferencedAssembly将使用Assembly.Load加载的插件程序集添加到应用程序域的引用中.具体实现 ...
- 自动化CI构建工具
hudson/maven jenkins,bamboo, hudson
- js把json数据转化成树形数据
/*转化函数*/ function(data, attributes) { let resData = data; let tree = []; for(let i = 0; i < resDa ...
- [leetcode DP]62.Unique Paths
判断一个物体从左上角到右下角有多少种走法 class Solution(object): def uniquePaths(self, m, n): flag = [[1 for j in range( ...
- quote函数什么意思,怎么用
转自: https://blog.csdn.net/qiqiyingse/article/details/70046543 quote函数 属于urllib库里面的一个函数 屏蔽特殊的字符.比如如果u ...