改善C#程序的157个建议(连载2)

发表于:2011-10-13 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陆敏技    来源:51Testing软件测试网采编

  2、使用类型内置的Parse、TryParse,或者如ToString、ToDouble、ToDateTime等方法

  在FCL中,如果某个类型经常需要进行转型操作,类型自身则会带有一些转型方法。比如从string转型为int,因为其经常发生,所以int本身就提供了Parse和TryParse方法。一般情况下,如果要对某类型进行转型操作,建议先查阅该类型的API文档。

  3、使用帮助类提供的方法

  可以使用如System.Convert类、System.BitConverter类来进行类型的转换。

  System.Convert提供了将一个基元类型转换为其他基元类型的方法,如ToChar、ToBoolean方法等。值得注意的是,System.Convert还支持将任何自定义类型转换为任何基元类型,只要自定义类型继承了IConvertible接口就可以。如上文中的Ip类,如果将Ip转型为string,除了重写Object的ToString方法外,还可以实现IConvertible的ToString方法,代码如下所示:

  • class Ip : IConvertible  
  • {  
  •     //省略  
  •     public bool ToBoolean(IFormatProvider provider)  
  •     {  
  •         throw new InvalidCastException("Ip-to-Boolean conversion is not supported.");  
  •     }  
  •     public string ToString(IFormatProvider provider)  
  •     {  
  •         return value.ToString();  
  •     }  
  •     //省略  
  • }
  •   继承IConvertible接口必须同时实现其他转型方法,如上文中的ToBoolean,如果不支持此类转型,则应该抛出一个InvalidCastException,而不是一个NotImplementedException。

      System.BitConverter提供了基元类型与字节数组之间相互转换的方法,这里不再赘述。

      4、使用CLR支持的转型

      CLR支持的转型,即上溯转型和下溯转型。这个概念首先是在Java中提出来的,实际上就是基类和子类之间的相互转换,如图1-1所示。

    图1-1 类的继承

      在进行子类向基类转型的时候支持隐式转换,如Dog显然就是一个Animal;而当Animal转型为Dog的时候,必须是显式转换,因为Animal还可能是一个Cat,代码如下所示:

  • Animal animal;  
  • Dog dog = new Dog();  
  • animal = dog;       //隐式转换,因为Dog就是Animal  
  • //dog = animal;     //编译不通过  
  • dog = (Dog)animal;  //必须存在一个显式转换
  • 相关链接:

    改善C#程序的157个建议(连载1)

    22/2<12
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号