C#中子类调用父类的实现方法
作者:shichen2014 发布时间:2023-08-17 09:09:52
本文实例讲述了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#类的初始化与继承的理解。希望本文所述对大家进一步的学习C#程序设计有所帮助。


猜你喜欢
- 文档地址https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring
- 本文实例讲述了C#实现读取指定盘符硬盘序列号的方法。分享给大家供大家参考,具体如下:using System;using System.IO
- 这两个update都是使用generator生成的mapper.xml文件中,对dao层的更新操作update更新传回数据的所有字段,没有传
- 本文以C#及VB.NET后端程序代码示例展示如何将HTML转为XML文件。转换时,调用Word API -Free Spire.Doc fo
- 目录首先必须要有一个个人微信公众号效果图后台路由代码完整代码首先必须要有一个个人微信公众号个人微信公众号相关的接口权限有限,不过用于个人学习
- 本文实例讲述了java读取properties配置文件的方法。分享给大家供大家参考。具体分析如下:这两天做java项目,用到属性文件,到网上
- ViewPagerIndicator导航栏指示器运行效果:实现这个效果,我是看了很多大神写的博客和视频后自己敲的,欢迎指正github地址:
- 1. JAVA源文件的命名JAVA源文件名必须和源文件中所定义的类的类名相同。2. Package的命名Package名的第一部分应是小写A
- 网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角。主要运用了System.Drawing.Dra
- 昨天使用mybatis-plus。使用自动填充后发现了两个问题。一个是填充数据为null,一个是当使用了mybatis-plus的乐观锁,自
- Logback日志基础配置logback日志配置有很多介绍,但是有几个非常基础的,容易忽略的。下面是最简单的一个配置,注意加粗的描述<
- 我们已经写了一些Java程序。之前的每个Java程序都被保存为一个文件,比如Test.java。随后,该程序被编译为Test.class。我
- 在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>、DataTa
- 一、音乐播放器的实现原理 Javase的多媒体功能很弱,所以有一个专门处理多媒体的插件叫JMF,JMF提供的模型可大致分为七类*
- java使用HttpClient调用接口HttpClient 提供的主要的功能(1)实现了所有 HTTP 的方法(GET,POST,PUT,
- 一、常见的状态保存恢复方式①onSaveInstance + onRestoreInstance这种方式是最通用的实现状态保存与恢复,在An
- 本小节内容不多,但是个人感觉比较独立,还是拿出来单讲吧。在开发 IntelliJ Plugin 时,如果需要用到 Gson、OKHttp 等
- 一、背景在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDe
- Android Fragment滑动组件ViewPager的实例详解1适配器FragmentPagerAdapter的实现对于Fragmen
- 前几天,收到 AS 发布的 3.0 更新,就迫不及待的更新了,更新后发现整个界面的画风都变了,和 IDEA 更像了本人是命令行重度使用患者,