C#中子类调用父类的实现方法

 更新时间:2014年09月04日 15:34:38   投稿:shichen2014  
这篇文章主要介绍了C#中子类调用父类的实现方法,通过实例逐步分析了类中初始化构造函数的执行顺序问题,有助于加深对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#类的初始化与继承的理解。希望本文所述对大家进一步的学习C#程序设计有所帮助。

相关文章

  • C#绘制椭圆的方法

    C#绘制椭圆的方法

    这篇文章主要介绍了C#绘制椭圆的方法,涉及C#图形绘制的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C#开发答题赢钱游戏(自动答题器)

    C#开发答题赢钱游戏(自动答题器)

    现在最火的直播游戏,那就是答题赢钱直播了,如百万英雄、芝士超人、花椒直播、冲顶大会等等,这些游戏的玩法都很简单,答对12题即可瓜分奖金了。玩法虽简单但是完全答对12题难度就挺高了,下面小编给大家带来了C#开发答题赢钱游戏,需要的朋友参考下吧
    2018-01-01
  • 深入学习C#网络编程之HTTP应用编程(上)

    深入学习C#网络编程之HTTP应用编程(上)

    这篇文章主要介绍了如何学习C#网络编程之HTTP应用编程的相关知识,文中讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#实现treeview绑定的方法

    C#实现treeview绑定的方法

    这篇文章主要介绍了C#实现treeview绑定的方法,包括datatable的获取与节点的操作,具有一定的参考价值,需要的朋友可以参考下
    2014-12-12
  • C#使用Windows Service的简单教程(创建、安装、卸载、调试)

    C#使用Windows Service的简单教程(创建、安装、卸载、调试)

    这篇文章主要为大家详细介绍了C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • C#实现给DevExpress中GridView表格指定列添加进度条

    C#实现给DevExpress中GridView表格指定列添加进度条

    这篇文章主要为大家详细介绍了如何利用C#实现给DevExpress中GridView表格指定列添加进度条显示效果,感兴趣的小伙伴可以尝试一下
    2022-06-06
  • 解析C#中@符号的几种使用方法详解

    解析C#中@符号的几种使用方法详解

    本篇文章是对C#中@符号的几种使用方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#在图片增加文字的实现代码

    C#在图片增加文字的实现代码

    最近做项目需要动态给图片增加文字(书本的封面图片),修改字体大小、字体、颜色、控制位置等,下面通过实例代码给大家分享C#在图片增加文字的实现代码,一起看看吧
    2017-06-06
  • C#实现启动项管理的示例代码

    C#实现启动项管理的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现启动项管理,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 深入c# GDI+简单绘图的具体操作步骤(四)

    深入c# GDI+简单绘图的具体操作步骤(四)

    本篇文章是向大家介绍了如何做一个类似windows画图工具的具体方法,需要的朋友参考下
    2013-05-05

最新评论