建议9: 习惯重载运算符

在开发过程中,应该习惯于使用微软提供给我们的语法特性。我想每个人都喜欢看到这样的语法特性:

    int x = 1;  int y = 2;  int total = x + y; 

而不是用下面的语法来完成一样的事情:

    int x = 1;  int y = 2;  int total = int.Add(x, y); 

同理,在构建自己的类型时,我们应该始终考虑该类型是否可以用于运算符重载。如果考虑类型Salary,下面的这段代码看起来就不是那么舒服了:

    Salary mikeIncome = new Salary() { RMB = 22 };  Salary roseIncome = new Salary() { RMB = 33 };  Salary familyIncome = Salary.Add(mikeIncome, roseIncome); 

应该使类型支持:

Salary familyIncome = mikeIncome + roseIncome; 

后者读起来一目了然。CLR支持在类型中,通过使用operator关键字定义静态成员函数来重载运算符,让开发人员可以像使用内置基元类型一样使用该类型。Salary重载“+”运算符的版本看起来应该像以下形式:

    class Salary  {  public int RMB { get; set; }  public static Salary operator +(Salary s1, Salary s2)  {  s2.RMB += s1.RMB;  return s2;  }  }

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

转载于:https://www.cnblogs.com/jesselzj/p/4725144.html

编写高质量代码改善C#程序的157个建议——建议9: 习惯重载运算符相关推荐

  1. 编写高质量代码改善C#程序的157个建议——建议148:不重复代码

    建议148:不重复代码 如果发现重复的代码,则意味着我们需要整顿一下,在继续前进. 重复的代码让我们的软件行为不一致.举例来说,如果存在两处相同的加密代码.结果在某一天,我们发现加密代码有个小Bug, ...

  2. 编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理

    建议86:Parallel中的异常处理 建议85阐述了如何处理Task中的异常.由于Task的Start方法是异步启动的,所以我们需要额外的技术来完成异常处理.Parallel相对来说就要简单很多,因 ...

  3. 编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型...

    建议87:区分WPF和WinForm的线程模型 WPF和WinForm窗体应用程序都有一个要求,那就是UI元素(如Button.TextBox等)必须由创建它的那个线程进行更新.WinForm在这方面 ...

  4. 编写高质量代码改善C#程序的157个建议——建议127:用形容词组给接口命名

    建议127:用形容词组给接口命名 接口规范的是"Can do",也就是说,它规范的是类型可以具有哪些行为.所以,接口的命名应该是一个形容词,如: IDisposable表示可以被释 ...

  5. 编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量...

    建议133:用camelCasing命名私有字段和局部变量 私有变量和局部变量只对本类型负责,它们在命名方式也采用和开放的属性及字段不同的方法.camelCasing很适合这类命名. camelCas ...

  6. 编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句

    建议104:用多态代替条件语句 假设要开发一个自动驾驶系统.在设计之初,此自动驾驶系统拥有一个驾驶系统命令的枚举类型: enum DriveCommand{Start,Stop} 当前该枚举存在两个命 ...

  7. 编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试...

    建议157:从写第一个界面开始,就进行自动化测试 如果说单元测试是白盒测试,那么自动化测试就是黑盒测试.黑盒测试要求捕捉界面上的控件句柄,并对其进行编码,以达到模拟人工操作的目的.具体的自动化测试请学 ...

  8. 编写高质量代码改善C#程序的157个建议——建议130:以复数命名枚举类型,以单数命名枚举元素...

    建议130:以复数命名枚举类型,以单数命名枚举元素 枚举类型应该具有负数形式,它表达的是将一组相关元素组合起来的语义.比如: enum Week{Monday,Tuesday,Wednesday,Th ...

  9. 编写高质量代码改善C#程序的157个建议——建议50:在Dispose模式中应区别对待托管资源和非托管资源...

    建议50:在Dispose模式中应区别对待托管资源和非托管资源 真正资源释放代码的那个虚方法是带一个bool参数的,带这个参数,是因为我们在资源释放时要区别对待托管资源和非托管资源. 提供给调用者调用 ...

最新文章

  1. 李飞飞宣布成立斯坦福“以人为本AI研究院”
  2. Exchange Server 2013之邮件存档配置
  3. bean定义的继承 - Spring Framework reference 2.0.5 参考手册中文版
  4. layui表单mysql_layui表单验证支持select下拉框的一种方法
  5. 牛客假日团队赛10 L 乘积最大 (dp,大数)
  6. html5--3.1 form元素
  7. windbg linux内核调试,使用Windbg调试window内核
  8. java bean 动作标签_jsp:javabean动作标签实例
  9. Qt开源作品40-图片及文字与base64编码互换
  10. 阿克曼函数求解(递归和非递归)
  11. php编辑日历,【PHP】制作日历
  12. 微信小程序生成二维码最新版
  13. CCS的c语言编程,CCS_C语言编程
  14. 生物信息分析服务器平台,高通量数据生物信息分析平台
  15. 这个是什么错误,求大神解答
  16. ES文件浏览器★显示永久VIP会员★去盗版弹窗
  17. 用vmware安装redhat 9出现“光盘无法被挂载”错误的解决办法
  18. 基本知识 100118
  19. 实现简单的自定义音乐播放器
  20. 百度一键Root使用教程

热门文章

  1. [WildPackets.OmniPeek].OmniPeek.4.0.1
  2. linux源码Makefile详解(完整)-转
  3. PAT 乙级 1029. 旧键盘(20) Java版
  4. 【iOS】使用SQLite3的时候Swift3.、XCode8报错:Unsupported architecture - 'arm/arch.h'file not found - Could not
  5. 【Spring】Spring的AOP术语解释
  6. java方法被编译器调用_我异常了,快来捕获我,Java异常简述
  7. mycat php pdo,mycat程序写入和读取中文乱码解决
  8. SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
  9. ANT出现“警告: 编码 GBK 的不可映射字符”解决方法
  10. UnityWebform(2):自定义LifetimeManager和TypeConverter使Unity从HttpContext中取值注入WebForm页面...