在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;
  }

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

 

引用 2 楼  的回复:
你写的方法等于是白白显式调用了父类构造函数。

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

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



谢谢你啊 ? 刚才打了以下代码,确实是你说的那样啊!他子所以调用父类中的构造函数就是在我掉哦那个子类中的构造函数是把我写的参数传递给了父类中的构造函数 ,然后调用父类中的构造函数 。然后,我在写 子类中的构造函数时就不用初始化父类中属性了 ,直接 在子类中初始化父类中没有属性 
你看我这样理解对吗?? 

 

引用 5 楼  的回复:
正确。
所以构造函数人某种意义上来说也是可以“继承”的。



通过这个列子看来关于 ”构造函数不能被继承的说法是错误的“ ,我是照着我们教材上打的代码,没想到我教材上写错了啊,害的我看这句代码 研究了 半天,经过你这么一提示,才知道正确调用父类中的写法啊!!感激不敬!!

posted @ 2017-07-25 17:46  Net-Spider  阅读(509)  评论(0)    收藏  举报