C# 构造函数调用顺序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
private string name; public uint Id; public GenericCustomer(string name) {
Console.WriteLine("GenericCustomer Constructor!");
this.name = name; Console.WriteLine("Name initialized !"); }
最后就是关于同一类中构造函数的调用方式。可以定义为 2 参调 1 参, 也可以定义为 1 参调 2 参,我们不妨采用后者。直接加上相应的单参 构造函数,如下: public Nevermore60Customer(string name) : this(name, 0)
{ Console.WriteLine("Nevermore60Customer
问题解析:
首先分析构造函数执行顺序,根据 C#中规定的有关构造函数及派生 类构造函数相关用法,为了实现相关构造函数的调用关系,本人采用 调用基类构造函数的方式编写。实现如下所示: public class GenericCustomer //基类
{ private string name; public uint Id; public GenericCustomer(string name) { Console.WriteLine("GenericCustomer
最终测试结果:
总结:
通过本次测试,对于基类与派生的构造函数使用及初始化方式有了更 具体的逻辑顺序认识,是按照先基类后派生的顺序执行,更好地体现 了 C#安全性特点。
附:程序清单
Program.cs using System; namespace Wrox {
public class Test {
public class GenericCustomer //基类 {
: base(name) {
Console.WriteLine("Nevermore60Customer Constructors with 2 parameters.");
-2-
base.Id = Id; } base(name)调用基类构造函数,利用主函数调用派生类构造函数时 我们得到结果:
显然,其执行过程是按照先基类后派生类的顺序,这也符合我们的理 解,先初始化后操作才是合理的方式。 由此,我们不难继续测试,相应增加一个参数的构造函数,同理可得 到 3 个构造函数的调用顺序,即题目所要求测试出的结果。
-4-
} public class Nevermore60Customer : GenericCustomer //派生类 {
private string referrerName; private uint highCostMinutesUsed; private string nickName; public Nevermore60Customer(string name, uint Id)//两个参数的构造函数
Constructor!"); this.name = name;
} } public class Nevermore60Customer : GenericCustomer //派 生类 {
private string referrerName; private uint highCostMinutesUsed; private string nickName; public Nevermore60Customer(string name, uint Id)
Constructors with 1 parameter."); }
得出结果即为我们所期望的,结论就是按照先基类,再派生类中先调 用函数,最后是 Main 方法中调用的构造函数。
-3-
算法设计流程:首先定义基类 GenericCustomer 及单参构造函数,
然后派生 Nevermore60Customer 类,并分别设计 1 个参数和 2 个参数 的构造函数,初始化时调用基类函数或者本类中函数,同时执行相应 初始化工作,并在构造函数中加入相应的输出说明,便于观察其调用 执行过程。,便于理解全执行过程。
C#课程测试报告
姓名: 薛守来
学号: 53091104
年级:
09 级
班级:
wk.baidu.com
11 班
提交日期: 2011/9/7
指导老师: 吕帅
题目:派生类的构造函数调用过程测试与分析
-1-
研 究 对 象 及 要 求 : ( 4.2.6. 派 生 类 的 构 造 函 数 ) 基 类
GenericCustomer 包含:私有成员 name,带 1 个参数的构造函数;派 生 类 Nevermore60Customer 包 含 : 私 有 成 员 referrerName 和 highCostMinutesUsed,带 2 个参数的构造函数,带 1 个参数的构造 函数。 请为基类 GenericCustomer 添加一个无符号整型字段 Id(公有成员), 为派生类 Nevermore60Customer 添加一个字符串型字段 nickNam(e 私 有成员),设计并实现几个有调用关系的构造函数(构造函数中必须 包含 name 和 Id 的初始化,一定没有 highCostMinutesUsed 的初始 化),进行必要的测试,以说明构造函数的调用和执行次序,以及字 段的初始化顺序。
至于初始化顺序,不难发现,按照程序执行情况,应该跟构造函数的 调用情况是一致的,即加上相应的说明情况即得出结论。 在相应的构造函数中加入如下代码: 基类中: Console.WriteLine("Name initialized !"); 派生类双参数构造函数中: Console.WriteLine("Id initialized !"); 从而我们得出相应的运行结果:
-5-
: base(name) {
Console.WriteLine("Nevermore60Customer Constructors with 2 parameters.");
base.Id = Id; Console.WriteLine("Id initialized !"); } public Nevermore60Customer(string name) //一 个参数的构造函数 : this(name, 0) { Console.WriteLine("Nevermore60Customer Constructors with 1 parameter."); } } static void Main(string[] args) { GenericCustomer customer = new Nevermore60Customer("Arabel Jones"); Console.ReadLine(); } } }
相关文档
最新文档