当前位置: 移动技术网 > IT编程>开发语言>c# > C#中子类调用父类的实现方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实例讲述了c#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下: 一、通过子类无参构造函数创建子类实例 创建父类person和子类student。

本文实例讲述了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#程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网