C#箴言:使用构造函数初始化语句

2016-02-19 15:08 3 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐C#箴言:使用构造函数初始化语句,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

  在写程序的时候,往往会出现为一个类型提供不同场景的构造函数,可能大多构造函数比较相似,而C#中又不允许缺省参数,因此构造函数的编写无疑是一个重复工作。但是使用Copy和Paste来完成构造函数的编写,有时候很难达到统一,尤其是当成员发生变化的时候。因此比较常见的替换方法就是为构造函数提供一个统一的成员函数来完成初始化工作。

  例如:

public class MyClass{ private int _Age; private string _Name; public MyClass( string Name) {  InitMember( Name, 20 ); } public MyClass( string Name, int Age ) {  InitMember( Name, Age ); } /// summary /// Init class members /// /summary /// param name="Name"/param /// param name="Age"/param private void InitMember( string Name, int Age ) {  _Age = Age;  _Name = Name; }}

  不过,在C#中提供了更为简明的方法,就是在构造函数初始化语句中调用另一构造函数,那么上面的形式可以改写为如下这样。

public class MyClass{ private int _Age; private string _Name; public MyClass( string Name):this( Name, 20 ) {} public MyClass( string Name, int Age ) {  _Age = Age;  _Name = Name; }}

  对于这两者来说,执行效率没有太大差别,但从代码质量而言,后者要好很多,而且会使代码看起来更清晰。

  其次,对于基类的调用。由于成员函数不能调用基类的构造函数,所以对于第一种编写就比较困难,后者就简单多了。

  例如:

public class MyClass:BaseClass{ private int _Age; private string _Name; public MyClass( string Name):this( Name, 20 ) {} public MyClass( string Name, int Age ):base( Name, Age ) {  _Age = Age;  _Name = Name; }}

  这里要提的一点就是构造函数初始化语句,对于this或者base之类的调用只能有一个,不能并存。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  最后,就是对于readonly常量的初始化,由于readonly常量只能通过成员初始化语句或者在构造函数中被修改,因此在成员函数中无法修改readonly常量,这也是构造函数初始化语句要比成员函数好的重要一个因素。

  有了上面的说明,对于两者的对比,可以形成如下这个简单的对比表。

效率代码结构基类调用静态成员初始化构造函数初始化语句一样简明清晰容易可以成员函数比较清晰比较麻烦不能

  (注:这里不提倡Copy/Paste方法来重复编写构造函数)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1608994.html

延伸阅读
标签: Web开发
今天有个哥们问我要是JavaScript函数重名了会有什么后果?开始我没有细想,就说可能会出错吧,可是等我实验完了发现页面没有任何脚本错误提示,而且程序也运行了,只是对同名函数的调用执行了位置靠后的一个。     回头仔细一想,这个结果完全可以接受,因为脚本在页面里本身就是顺序执行下来的,包括函数的定义,但然如果只是...
/*********************************** 作者:trieagle(让你望见影子的墙) 日期:2009.8.14 注: 转载请保留此信息 ************************************/ 使用c#构造date数据类型 在sql server2005没有实现date类型,但是提供了很好的扩展性,可以利用CLR来构造date类型。有一部分是参考了Fc的代码写的。 步骤: 1、在vs 2005中新建...
  至于x86的引导无非如下步骤: 1,cpu初始化自身,在固定位置执行一条指令。 2,这条指令条转到bios中。 3,bios找到启动设备并获取mbr,该mbr指向我们的lilo 4,bios装载并把控制权交给lilo 5,压缩内核自解压,并把控制权转交给解压内核。 简单点讲,就是cpu成为内核引导程序的引导程序的引导程序的引导程序,西西。 这时内核将跳转...
标签: MySQL mysql数据库
  在开发数据库应用的过程难免会编写大量的SQL语句,其中大部份是查询语句;为不同情况编写查询语句是一件很烦琐的事件。用过hibernate或Nhibernate会了解到把SQL查询语句对象化后使用起非常方便和快捷;也大大减少在编写查询SQL语句所带来的错误等问题。        前段时间在编写一个数据处理类的时候同样遇...
标签: 电脑入门
在Windows通信端口初始化失败一般都有以下几种情况可以判断。情况如下: 1、在电脑开机之后,时间上需要六分钟左右才可以进入系统,或者更长。 2、在我们打开电脑之后,我们双击360图标的时候,电脑会提示Windows通信端口初始化失败 3、在输入命令中,输入netstat -an命令出现乱码。 4、如果是连接无线来上网的会发现无线上网也无法连接了...

经验教程

101

收藏

73
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部