在一个类中如果需要实现多个自定义构造函数,通常做法是在构造函数中实现各自的业务逻辑,如果这些业务逻辑的实现并非截然不同的话,显然不符合oop编程思想,极不利于维护,当然,我们也可以通过将相同的逻辑部分封装成一个方法,但还有一种更为合理简单的方法,下面就通过this关键字来实现串联构造函数做一简单示例。

示例代码如下:

 public class Person
{
public string personName;
//定义年龄为可空类型,这样就可以赋予其null值
public int? personAge; //下面前三个构造函数都是去调用参数最多的第四个构造函数,只取它们所需要的部分参数即可
//这样的做法就是this串联构造函数
public Person():this("",)
{ } public Person(string name):this("evan",null)
{ } public Person(int age):this("",)
{ } public Person(string name, int? age)
{
this.personName = name;
//通过 ?? 判断传入的age是否null值
//如果属于null值,则赋值100
this.personAge = age ?? ;
} public void Display()
{
Console.WriteLine("Name:{0},Age:{1}\n", personName, personAge);
}
}

主函数调用如下:

 static void Main(string[] args)
{
Person per1 = new Person();
per1.Display(); Person per2 = new Person();
per2.Display(); Person per3 = new Person("evan");
per3.Display(); Person per4 = new Person("evan", );
per4.Display(); Console.ReadLine();
}

这样的做法就是让一个接受参数最多的构造函数做"主构造函数", 且在主构造函数中实现必须的业务逻辑,其余的构造函数只要使用this关键字把传入的参数转发给主构造函数,并且提供必须的其它参数,这样子,我们整个类中需要我们操心的就是那个主构造函数了,其余构造函数基本上可以为空。

(注意:如果构造函数链中还有实现各自的逻辑,那么实际上是先执行主构造函数的代码,再执行各自逻辑),使用这种做法,真正的工作都交给了一个构造函数,类定义就会更简洁、更易维护、简化了编程任务。

this关键字实现串联构造函数调用的更多相关文章

  1. 你不知道的JavaScript--Item8 函数,方法,构造函数调用

    1.函数调用 Function绝对是JavaScript中的重中之重.在JavaScript中,Function承担了procedures, methods, constructors甚至是class ...

  2. C# 构造函数调用顺序

    了解C#的一个类的加载过程,对于语言机制的理解和写出高效的语言很有帮助,这里简单介绍一下类的实例的构造函数调用过程.C#类的实例的构造过程是,先为实例的数据字段分配内存,并对所有字段按字节置零(0或者 ...

  3. java初始化构造函数调用顺序

    类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值:  (2)调用父类构造函数:  (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式:  (4)调用本身构造函数. 例子 ...

  4. [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同

    面向对象编程中,函数.方法.类的构造函数是三种不同的概念. JS中,它们只是单个构造对象的三种不同的使用模式. 三种不同的使用模式 函数调用 function hello(username){ ret ...

  5. C++中构造函数调用构造函数

    今天想做道矩阵的题目时,却卡在一些编程细节上了,找了好久才发现原来是在构造函数处出了问题,然后上网百度了下,发现这篇文章说得很好:从一道题谈C++中构造函数调用构造函数,很棒! 还补充一点: 看来自己 ...

  6. C++ 全局构造函数调用的顺序

    C++的全局类和静态类的构造函数是在main函数之前调用的.但是,不同的类的构造函数以什么顺序调用呢? 对于g++编译器来说,这个顺序是由链接时,文件顺序决定的. 我们用一个例子来说明这一点. 我们有 ...

  7. C++类中一个构造函数调用另一个构造函数

    class A { int a; int b; int c; public: A(int aa, int bb) : a(aa), b(bb),c(0) { cout << "a ...

  8. [development][c++] C++构造函数调用构造函数

    构造函数调用构造函数是会问题的. 外层函数返回的内存, 与被调用的构造函数返回的内存并不是一个内存. 错误示例代码如下: msg_log(const char *name, const char* t ...

  9. Effective C++(9) 构造函数调用virtual函数会发生什么

    问题聚焦: 不要在构造函数和析构函数中调用virtual函数,因为这样的调用不会带来你预想的结果. 让我先来看一下在构造函数里调用一个virtual函数会发生什么结果 Demo class Trans ...

随机推荐

  1. 微信小程序引入外部js 方法

    步骤: 1.首先将外部js放在你指定的文件夹里(这都是废话...) 2.接下来 将该js文件中你要使用的方法给暴露出来 3.在您要使用的js中引入该js 4.使用暴露出来的方法 例子:使用md5加密 ...

  2. lstat函数的使用【学习笔记】

    通过lstat函数获取文件的类型的代码如下. #include "apue.h" int main(int argc,char *argv[]) { int i; struct s ...

  3. monitor.sh java脚本学习

    #! /bin/bash# unset any variable which system may be using# clear the screen while getopts ivh named ...

  4. linux初级学习笔记九:linux I/O管理,重定向及管道!(视频序号:04_3)

    本节学习的命令:tr,tee,wc 本节学习的技能: 计算机的组成 I/O管理及重定向     管道的使用 知识点九:管理及IO重定向(4_3) 计算机组成: 运算器.控制器: CPU 存储器:RAM ...

  5. codeforces 441B. Valera and Fruits 解题报告

    题目链接:http://codeforces.com/problemset/problem/441/B 题目意思:有 n 棵fruit trees,每课水果树有两个参数描述:水果成熟的时间和这棵树上水 ...

  6. codeforces 433C. Ryouko's Memory Note 解题报告

    题目链接:http://codeforces.com/problemset/problem/433/C 题目意思:一本书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么| ...

  7. mac系统下查看端口占用情况

    localhost:~ mhx$  lsof -i tcp:8080 COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NA ...

  8. CodeForces-668D:Remainders Game (中国剩余定理||理解)

    Today Pari and Arya are playing a game called Remainders. Pari chooses two positive integer x and k, ...

  9. MyBatis相关资源

    MyBatis很多项目中有用到,但会用并不表示你真正理解它,更不代表你能很清楚的教会别人.如果想在会用它的基础上更深入的通过学习它而提升自己技术能力,可利用下面资源. 1.官网文档,基本概念讲的很清楚 ...

  10. uCareSystem:Ubuntu/Linux Mint的一体化系统更新和维护工具

    对于任何一款允许用户还原电脑到之前状态(包括文件系统,安装的应用,以及系统设置)的操作系统来说,系统还原功能都是必备功能,它可以恢复系统故障以及其他的问题. 有的时候安装一个程序或者驱动可能让你的系统 ...