假定没有为任何类定义任何显式的构造函数,这样编译器就会为所有的类提供默认的初始化构
造函数,在后台会进行许多操作,但编译器可以很好地解决类的层次结构中的所有问题,每个类中
的每个字段都会初始化为对应的默认值。但在添加了一个我们自己的构造函数后,就要通过派生类
的层次结构高效地控制构造过程,因此必须确保构造过程顺利进行,不要出现不能按照层次结构进
行构造的问题。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication3
{//抽象类是指设计为被继承的类,抽象类只能用作其它类的基类,且抽象类不能被实例化abstract class GenericCustomer{private string name;/// <summary>/// 构造函数/// </summary>/// <param name="name"></param>public GenericCustomer(string name){this.name = name;}}class NeverMore60Customer : GenericCustomer{private uint highCostMinutesUsed;private string referrerName;//使用base关键字指定应使用基类中的哪一个构造函数public NeverMore60Customer(string name, string referrerName): base(name){this.referrerName = referrerName;}//使用this关键字指定应使用当前类中的哪一个构造函数public NeverMore60Customer(string name): this(name, "<None>"){}}class MyClass{readonly int firstVar;readonly double secondVar;public string UserName;public int UserIdNumber;public void Print(){Console.WriteLine(firstVar);Console.WriteLine(secondVar);}//私有构造函数执行其它构造函数共用的初始化,该构造函数//只能让类中其它构造函数调用,而不能从类的外部调用private MyClass(){firstVar = 20;secondVar = 30.5;}public MyClass(string firstName): this(){UserName = firstName;UserIdNumber = -1;}public MyClass(int id): this(){UserName = "Anonymous";UserIdNumber = id;}public MyClass(string firstName, int userIdNumber): this(){UserName = firstName;UserIdNumber = userIdNumber;}}class Program{static void Main(string[] args){MyClass myClass = new MyClass("Jason", 1);//myClass.Print();Console.WriteLine(myClass.UserIdNumber);Console.WriteLine(myClass.UserName);}}
}