All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PHP,PEAR简介_php资料_编程技术
详解aspx页面事件的执行顺序_[Asp.Net教程]
SQL Server 存储过程的经典分页_[SQL Server教程]
使用Forms,Authentication实现用户注册、登录,(二)用户注册与登录_[Asp.Net教程]
Asp.net中的Popup控件的使用方法_.net资料_编程技术
ASP.NET技巧:ASP.NET2.0泛型和匿名方法_[Asp.Net教程]
PHP,5.0,Pear安装方法_php资料_编程技术
关于HTTP及XMLHTTP状态代码一览_[XML教程]
PHP技巧:PHP的mb_substr和mb_strcut的区别_[PHP教程]
数据库菜鸟不可不看,简单SQL语句小结_mssql学习_编程技术
Reading number is top 10 pictures
Wild animals melee moment of life and death2
福利是必须的
人美胸美腿更美3
寒流来了
A man's favorite things12
Most cow mistress ZhaoGongXia face exposure
黑社会大哥相亲
Beauty shocked Japan Tokyo motor show model
The cat shit
A beautiful girl to bud2
Download software ranking
Tram sex maniac 2 (H) rar bag17
The hero
apache-tomcat-6.0.33
仙剑奇侠传98版歌曲
Unix video tutorial9
卡丁车单机版
尖东毒玫瑰B
Macromedia Dreamweaver 8
Tram sex maniac 2 (H) rar bag11
Desire a peach blossom
aaa published in(发表于) 2013/12/6 10:26:02 Edit(编辑)
C#箴言:使用构造函数初始化语句_.net资料_编程技术

C#箴言:使用构造函数初始化语句_.net资料_编程技术

C#箴言:使用构造函数初始化语句_.net资料_编程技术-数科优化网
  在写程序的时候,往往会出现为一个类型提供不同场景的构造函数,可能大多构造函数比较相似,而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 );
 }

 ///
 /// Init class members
 ///

 ///
 ///

 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”之类的调用只能有一个,不能并存。

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

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


效率
代码结构
基类调用
静态成员初始化
构造函数初始化语句
一样
简明清晰
容易
可以
成员函数
比较清晰
比较麻烦
不能
    (注:这里不提倡Copy/Paste方法来重复编写构造函数)




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.