浅谈C 浅谈茶具文化
创始人
2024-04-23 10:51:16
0

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

  1. publicclassMyClass  
  2. {  
  3. privateint_Age;  
  4. privatestring_Name;  
  5.  
  6. publicMyClass(stringName)  
  7. {  
  8. InitMember(Name,20);  
  9. }  
  10. publicMyClass(stringName,intAge)  
  11. {  
  12. InitMember(Name,Age);  
  13. }  
  14.  
  15. /// 
  16. ///Initclassmembers  
  17. ///
  18.  
  19. ///<paramnameparamname="Name"> 
  20. ///<paramnameparamname="Age"> 
  21.  
  22. privatevoidInitMember(stringName,intAge)  
  23. {  
  24. _Age=Age;  
  25. _Name=Name;  
  26. }  

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

  1. public class MyClass  
  2. {  
  3. private int _Age;  
  4. private string _Name;  
  5.  
  6. public MyClass( string Name):this( Name, 20 )  
  7. {}  
  8.  
  9. public MyClass( string Name, int Age )  
  10. {  
  11. _Age = Age;  
  12. _Name = Name;  
  13. }  

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

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

  1. publicclassMyClass:BaseClass  
  2. {  
  3. privateint_Age;  
  4. privatestring_Name;  
  5.  
  6. publicMyClass(stringName):this(Name,20)  
  7. {}  
  8.  
  9. publicMyClass(stringName,intAge):base(Name,Age)  
  10. {  
  11. _Age=Age;  
  12. _Name=Name;  
  13. }  

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

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

有了上面的说明,对于两者的对比,可以形成如下这个简单的对比表。以上介绍C#中构造函数和成员函数。

【编辑推荐】

  1. C#在应用程序间发送消息实现浅析
  2. 一些C#时间类型的入门知识
  3. C#接口和抽象类技术特点浅析
  4. 一个C#时间计算的实例
  5. C#继承知识详解

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...