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

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

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

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

  建议2:使用默认转型方法

  除了字符串操作外,程序员普遍会遇到的第二个问题是:如何正确地对类型实现转型。在上一个建议中,从int转型为string,我们使用了类型int的ToString方法。在大部分情况下,当需要对FCL提供的类型进行转型时,都应该使用FCL提供的转型方法。

  这些转型方法包括:

  使用类型的转换运算符。

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

  使用帮助类提供的方法。

  使用CLR支持的转型。

  下面分别对这些方法进行说明。

  1、使用类型的转换运算符

  使用类型的转换运算符,其实就是使用类型内部的一个方法(即函数)。转换运算符分为两类:隐式转换和显式转换(强制转换)。基元类型普遍都提供了转换运算符,如:

  • int i = 0;  
  • float j = 0;  
  • j = i;          //int到float(Single)存在一个隐式转换  
  • i = (int)j;     //float(Single)到int存在,而且必须存  
  •                 //在一个显式转换
  •   注意 所谓“基元类型”,是指编译器直接支持的数据类型,即直接映射到FCL中的类型。基元类型包括sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、bool、decimal、object、string。

      用户自定义的类型也可以通过重载转换运算符的方式来提供这一类转换,代码如下所示:

  • class Program  
  • {  
  •     static void Main(string[] args)  
  •     {  
  •         Ip ip = "192.168.0.96";  
  •         Console.WriteLine(ip.ToString());  
  •     }  
  • }  
  • class Ip  
  • {  
  •     IPAddress value;  
  •     public Ip(string ip)  
  •     {  
  •         value = IPAddress.Parse(ip);  
  •     }  
  •     public static implicit operator Ip(string ip)  
  •     {  
  •         Ip iptemp = new Ip(ip);  
  •         return iptemp;  
  •     }  
  •     public override string ToString()  
  •     {  
  •         return value.ToString();  
  •     }  
  • }
  •   在上面的代码中:

    Ip ip = "192.168.0.96";

      提供的就是字符串到类型Ip之间的隐式转换。但是,除非考虑一些初始化值,一般不建议用户对自己的类型重载转换运算符。如果用户自定义的类型之间需要转换,建议从面向对象的角度考虑,因为它们一般都含有某种关系(如继承、实现等)。在这种情况下,就应该使用即将介绍的第四种方法:CLR支持的转型。不过,我们仍需掌握FCL中的类型,尤其是基元类型之间的转换运算符,以便快速地在基元类型间进行转换。

    21/212>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

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

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

    沪ICP备05003035号

    沪公网安备 31010102002173号