在C#中子类显示调用父类中的构造函数有什么作用?

dabing69221 2012-06-17 08:30:05
在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();
}
}
}


...全文
1547 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dabing69221 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

正确。
所以构造函数人某种意义上来说也是可以“继承”的。
[/Quote]

通过这个列子看来关于 ”构造函数不能被继承的说法是错误的“ ,我是照着我们教材上打的代码,没想到我教材上写错了啊,害的我看这句代码 研究了 半天,经过你这么一提示,才知道正确调用父类中的写法啊!!感激不敬!!
bwangel 2012-06-17
  • 打赏
  • 举报
回复
正确。
所以构造函数人某种意义上来说也是可以“继承”的。
dabing69221 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

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

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

可以充分重用父类构造函数逻辑。
[/Quote]

谢谢你啊 ? 刚才打了以下代码,确实是你说的那样啊!他子所以调用父类中的构造函数就是在我掉哦那个子类中的构造函数是把我写的参数传递给了父类中的构造函数 ,然后调用父类中的构造函数 。然后,我在写 子类中的构造函数时就不用初始化父类中属性了 ,直接 在子类中初始化父类中没有属性
你看我这样理解对吗??
bwangel 2012-06-17
  • 打赏
  • 举报
回复 1
C#中,如果子类没有显示调用父类的有参构造函数:那么它会自动调用父类的无参构造函数;如果父类没有无参构造函数,将通不过编译。
bwangel 2012-06-17
  • 打赏
  • 举报
回复
你写的方法等于是白白显式调用了父类构造函数。

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

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

threenewbee 2012-06-17
  • 打赏
  • 举报
回复
构造函数不能“继承”。

110,983

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧