当前位置:  编程技术>.net/c#/asp.net

c#入门之类型转换详解

    来源: 互联网  发布时间:2014-10-30

    本文导语:  “无论是什么类型,所有的数据都是一系列的位,即一系列0和1。变量的含义是通过解释这些数据的方式来传达的。”——这句原话是书上翻译的,不过后一句话总感觉理解起来不是很通俗,自己觉得这样理解可能会合适些:...

“无论是什么类型,所有的数据都是一系列的位,即一系列0和1。变量的含义是通过解释这些数据的方式来传达的。”——这句原话是书上翻译的,不过后一句话总感觉理解起来不是很通俗,自己觉得这样理解可能会合适些:无论什么类型的数据,在计算机存储时都是0和1,而变量的意义,就是以不同的方式来解释这些数据,以达到满足程序应用、节约内存等需求。

换句话说:变量存在的意义,就是建立规(标)范(准)的数据存储方式。

隐式转换

类型转换分两种形式:隐式转换、显示转换。

隐式转换不需要单独的表达式,只需要把满足隐式转换条件的两个变量做相应的表达式操作即可,但隐式转换的结果可能并不是自己意料之中的:

代码如下:

ushort destinationVar;
char sourceVar = 'a';
destinationVar = sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}n",destinationVar);

上面的输出结果,sourceVar的是a,而destinationVar虽然=sourceVar,但输出的结果是97。可以看出,虽然两种数据类型满足隐式转换的条件(存储的值范围),但不同的表达类型决定了最终的结果也不一样。另外,和大多数编程一样,隐式转换时,只要类型A的取值范围比类型B的范围小,就可以隐藏转换为B。

显示转换

在显示转换中,可以使用强制转换和Convert。

强制转换只在某些情况下可以,可能应用的场景不太丰富,当然,这个的确要方便一些,在变量前加上类似 (byte) 的代码就可以了:

代码如下:

byte destinationVar;
short sourceVar = 281;
destinationVar = (byte)sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}n",destinationVar);

这个例子比较有意思,输出的结果是:sourceVar: 281, destinationVar: 25; 为什么不是变更为255?这就回到开头提到的了,其实转换过程中,丢掉的是数据存储的二进制位:

在转换的过程中,会把超过取值范围(255二进制位)的那个1丢掉,保留其它的位,所以最终结果是25,而不是255,也不是281。

Convert转换应该是常用的方式,因为它始终会进行溢出检查。

溢出检查配置

有些东西虽然没什么用,但是我们应该知道,否则出问题的时候就不知道怎么解决了。配置:解决方案资源管理器 - 右键 - 属性 - 生成 - 高级 - 检查运算上溢/下溢:

当然,对于强制转换可能需要这个配置,但使用Convert转换时始终会进行溢出检查的,所以这个配置和checked/unchecked就不起作用了。

结语

每次一看见那些数据类型、表达式的列表表格就头疼,因为根本记不住。就像哪些类型可以怎么转换成其它的类型的表格一样,其实个人感觉大可不必去记住这些,在实际做项目的过程中,只要记得有这方面的功能就行了,具体用哪一个,可以再回过头来翻书或google。

应该掌握的是:记住存在隐式转换,但这种方式应该尽量少用吧。而显示转换,方便的就直接用(),当然,最可靠的应该是Convert,因为在转换时,Convert始终都会进行溢出检查。


    
 
 

您可能感兴趣的文章:

  • c#创建windows服务入门教程实例 iis7站长之家
  • 希望了解java,能推荐一个好的开发工具和一本好的入门书籍吗?我以前直到现在都在用VC,接下来想在C#和java中选一个做为第二语言。
  • C#入门之索引器使用实例
  • C#入门之checked和unchecked的区别实例解析
  • C#实现GZip压缩和解压缩入门实例
  • C#入门学习笔记之C#匿名方法
  • c#创建windows服务入门教程实例
  • C#入门学习笔记之事件和委托的实例
  • C# BackgroundWorker组件学习入门介绍
  • 学习C# Socket入门实例代码
  • c# 接口interface基础入门小例子
  • c#入门之分支语句使用方法(三元运算符、if语句、switch语句)
  • c#入门之实现简易存款利息计算器示例
  • c#入门之循环语句使用详解(for循环、do/while)
  • C#反射实例学习入门及注意事项
  • C# 对XML操作入门实例
  • c#操作xml文件的实例(入门参考)
  • c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
  • c# 通用文件上传类(适合入门)
  • 在X分钟内学会C#的入门简明教程
  • Android入门之画图详解
  • python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
  • 微信公众平台开发入门教程(图文详解)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于docker入门教程
  • JAVA 怎么入门?
  • Python下Html/xml解析库Beautiful Soup快速入门教程
  • linux入门书籍?
  • 谢谢推荐几本关于JAVA入门好书?
  • 求KDevelop 入门教程
  • Vxworks 嵌入式操作系统入门请教,请多指点!
  • 我刚开始学linux,哪位有入门的视频教学呀!
  • ECMAScript 6入门
  • 请大家介绍一下java BEAN的入门读物吧
  • 请推荐几本java的入门和提高书籍.
  • 关于linux下编程入门的书籍
  • 刚刚进入linux下编程,请指点入门~~~
  • linux驱动入门问题
  • 求linux入门帮助
  • 求Linux的入门书籍
  • 谁能告诉我JAVA怎样快速的入门?
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • 准备从Windows转向Linux的软件开发,语言为C++,怎么入门?
  • 排版入门套件 Typeplate
  • 送分!!!入门的选择??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3