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#程序设计有所帮助。

标签:C#,子类,调用,父类
0
投稿

猜你喜欢

  • 一文搞懂Java中的序列化与反序列化

    2021-11-22 00:26:45
  • 深入理解C#序列化与反序列化的详解

    2022-06-23 05:11:58
  • JAVA内部类示例详解及练习

    2023-04-05 06:42:39
  • springboot 返回json格式数据时间格式配置方式

    2023-12-17 23:27:10
  • Android实现简单画中画功能

    2022-07-18 04:51:25
  • java Disruptor构建高性能内存队列使用详解

    2022-02-03 00:41:14
  • c# 圆形识别方案和直线识别方案的参考示例

    2022-03-10 13:44:11
  • IOS与网页JS交互详解及实例

    2023-07-08 11:58:20
  • 浅析C#中StringBuilder类的高效及与String的对比

    2022-09-14 15:54:04
  • Java7和Java8中的ConcurrentHashMap原理解析

    2022-06-09 22:06:28
  • IDEA中JetBrains Mono字体的正确安装姿势

    2022-03-12 12:21:40
  • Android中Webview打开网页的同时发送HTTP头信息方法

    2022-05-19 20:01:28
  • Android实现多线程下载图片的方法

    2021-10-16 08:37:43
  • Android DataBinding的官方双向绑定示例

    2023-09-15 04:39:27
  • java 类加载与自定义类加载器详解

    2022-05-21 04:31:31
  • SpringBoot错误处理机制以及自定义异常处理详解

    2021-09-23 05:45:29
  • RabbitMQ开启SSL与SpringBoot连接测试的配置方法

    2023-09-25 14:40:30
  • Java程序员应该遵守的10条纪律

    2022-07-16 22:47:41
  • jdk8的datetime时间函数使用示例

    2021-07-03 16:42:37
  • Java中GUI工具包AWT和Swing用法介绍

    2022-02-06 09:02:35
  • asp之家 软件编程 m.aspxhome.com