日期:2014-05-18  浏览次数:21101 次

在C#中子类显示调用父类中的构造函数有什么作用?
在C#中子类显示调用父类中的构造函数有什么作用?(有代码参考)一下是我写了一个子类调用父类构造函数的代码,我一直想不明白,子类调用父类中的构造函数有什么有用?既然子类已经继承了父类 那么在调用父类中的构造函数对父类进行初始化有什么意义啊?-----------》纠结中??(没分了!大家多担待啊!谢谢大家了啊!!)


这是一个父类

using System;
using System.Collections.Generic;
using System.Text;

namespace Person
{
  /// <summary>
  /// 父类
  /// </summary>
  class Person
  {
  /// <summary>
  /// 工号
  /// </summary>
  public int ID { set; get; }
  /// <summary>
  /// 姓名
  /// </summary>
  public string Name { get; set; }
  /// <summary>
  /// 性别
  /// </summary>
  public string Gender {get;set;}

  /// <summary>
  /// 父类中的构造函数
  /// </summary>
  /// <param name="id">工号</param>
  /// <param name="naem">姓名</param>
  /// <param name="gender">性别</param>
  public Person(int id,string name,string gender)
  {
  this.ID = id;
  this.Name = name;
  this.Gender = gender;
  Console.WriteLine("调用了父类中的有参构造函数");
  }
  }
}



这是一个子类

using System;
using System.Collections.Generic;
using System.Text;

namespace Person
{
  /// <summary>
  /// 子类
  /// </summary>
  class Student:Person
  {
  /// <summary>
  /// 人气值
  /// </summary>
  public int RenQi { get; set; }

  /// <summary>
  /// 只是子类中的构造函数
  /// </summary>
  /// <param name="id">工号</param>
  /// <param name="name">姓名</param>
  /// <param name="gender">性别</param>
  /// <param name="renQi">人气值</param>
  public Student(int id, string name,string gender,int renQi):base(id,name,gender)
  {
  this.ID = id;
  this.Name = name;
  this.Gender =gender;
  this.RenQi = renQi;
  }

  /// <summary>
  /// 调用子类中的方法显示信息
  /// </summary>
  public void ShowInfo()
  {
  Console.WriteLine("大家好!我是:{0},我的工号:{1},性别:"
  +"{2},我的人气值:{3}",base.Name,base.ID,base.Gender,this.RenQi);
  }
  }
}

这是Main方法

using System;
using System.Collections.Generic;
using System.Text;

namespace Person
{
  class Program
  {
  static void Main(string[] args)
  {
  //实例化Student类
  Student stu = new Student(123, "小小", "男", 232);
  //调用Student类中的方法显示信息
  stu.ShowInfo();
  }
  }
}




------解决方案--------------------
你写的方法等于是白白显式调用了父类构造函数。

正确的应该是:
public Student(int id, string name,string gender,int renQi):base(id,name,gender)
{
this.RenQi = renQi;
}

可以充分重用父类构造函数逻辑。