C#中类的继承以及继承过程中构造函数的调用
类的继承规则:
1、派生类自动包含基类的所有成员。但对于基类的私有成员,派生类虽然继承了,但是不能在派生类中访问。
2、所有的类都是按照继承链从顶层基类开始向下顺序构造。最顶层的基类是System.Object类,所有的类都隐式派生于它。只要记住这条规则,就能理解派生类在实例化时对构造函数的调用过程。
子类无论是默认构造(无参构造)和带参构造都默认将从顶层父类的默认构造一直调用到当前类之前的默认构造,再调用当前类的默认构造或者带参构造。
可以在构造函数语句之前使用 :base(参数) 来指定当前类调用上层类的哪一个构造函数。
示例:DerivedClass.cs文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DerivedClass2 { class BaseClass { public BaseClass() { Console.WriteLine("BaseClass 的默认构造器"); } public BaseClass(string BparaString) { Console.WriteLine("BaseClass 的带一个参数的构造器,参数是:{0}", BparaString); } public BaseClass(string BparaString, int BparaInt) { Console .WriteLine ("BaseClass 的带两个参数的构造器,参数是:{0},{1}",BparaString,BparaInt); } } class DerivedClass:BaseClass { public DerivedClass() { Console.WriteLine("DerivedClass 的默认构造器"); } public DerivedClass(string paraString) : base(paraString) { Console.WriteLine("DerivedClass 的带一个参数的构造器,参数是:{0}",paraString ); } public DerivedClass(string paraString, int paraInt) { Console.WriteLine("DerivedClass 的带两个参数的构造器,参数是:{0},{1}", paraString, paraInt); } } class DerivedDerivedClass : DerivedClass { public DerivedDerivedClass() { Console.WriteLine("DerivedDerivedClass 的默认构造器"); } public DerivedDerivedClass(string ddparaString) { Console.WriteLine("DerivedDerivedClass 的带一个参数的构造器,参数是:{0}", ddparaString); } public DerivedDerivedClass(string ddparaString, int ddparaInt) : base(ddparaString,ddparaInt ) { Console.WriteLine("DerivedDerivedClass 的带两个参数的构造器,参数是:{0},{1}", ddparaString, ddparaInt); } } }
Program.cs 文件
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace DerivedClass2 { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> static void Main() { DerivedClass DC1 = new DerivedClass("dc参数"); Console.WriteLine("----------------"); DerivedDerivedClass ddc = new DerivedDerivedClass("ddc参数",99); } } }
运行结果: