感觉写随笔第一天就遇到了困难,感觉好费时间啊,回宿舍就得8点多,然后只能看一点书。之后写随笔,首先得回忆,然后组织,最后打字。还有就是宿舍迎来的断网的日子,特别不方便,只能第二天去公司发。本人目前是.net开发实习生,之前零零散散学了些.net知识,如今打算好好巩固下C#,看了《C#高级编程》后感觉知识庞大,还有好些分支没掌握,虽然不知道有些东西值不值得学习,还是先学着吧。

好了,步入正题:从《C#高级编程》第7章运算符和类型强制转换开始

类型的安全性

类型转换

首先看一段代码:

Byte value1=10;

Byte value2=20;

Byte total=value1+value2;

Console.WriteLine(total);

初看似乎没有错误,但此时VS会弹出下面一段错误提示:

  错误 :    无法将类型“int”隐式转换为“byte”。存在一个显式转换(是否缺少强制转换?)

这是因为byte只能为8位,两个byte类型相加很容易得到超出8位大小的数值,这体现了C#类型的强安全性;

这时,把Byte total=value1+value2;

改为Byte value3 = (byte)(value1 + value2);  //显示转换

或者Int value3 = value1 + value2;   //隐士转换

以上就用到了两种类型转换,隐式转换显式转换

隐式转换:

就是从较小的数据类型可以转换为较大的数据类型

注意:

无符号的变量可以转换为有符号的变量,只要无符号的变量值在有符号的变量值内即可

·要类型转换中的可空类型(类型符后面带“?”,可空类型就是允许为Null的类型):

·可空类型转换规则遵循非可空类型的转换规则,即较小类型向较大类型转换

·非可空类型可以隐式转换为可空类型,但可空类型不能隐式转换为非可空类型。这是因为可空类型值允许为null,但非可空类型不允许为null。

显式转换:

就是强制转换,要说的就是数值溢出的问题

例如:

long val=3000000000;

int i=(int)val;

算术溢出,可以用unchecked和checked检测

默认情况下是unchecked,即对数值溢出不检测

使用checked,会迫使运行时抛出异常:

long val=3000000000;

int i=checked((int)val);

或者checked用{}包住需要验证溢出的语句

Checked

{

int i=checked((int)val);

}

后面还会用异常 try}{} catch{}来引入异常处理

之前提到的,可空类型转换为非可空类型,必须用到显示转换。如int?转换为int。这是因为可空类型允许为null。

如果可空类型为null,转换为非可空类型,就会抛出异常。

int? a=null;

int b=(int)a;       //将抛出异常

如果需要在数字和字符串之间转换,可以试用.Net类库中提供的方法:ToString();

int i=10;

string s=i.ToString();

关于类型转换,.Net还提供了两种安全带转换方法:Parse()和Convert方法。

例如:

string someString = "22";

int value1 = Int32.Parse(someString);

int value2 = Convert.ToInt32(someString);

还提到了一点,就是装箱拆箱

装箱,就是把值类型转换为引用类型Object类型。而拆箱就是把Object类型重新转换为值类型。

例:

int myInt=10;

object myObject=myInt;  //装箱,值类型都可以转换为引用Object类型

int myInt2=(int)myObject;   //拆箱,装箱的相反过程,需要强制转换

装箱,拆箱可用于:比如一个方法需要引用类型参数,此时把值类型装箱成为引用类型,之后可拆箱为值类型。

23:37,今天先写到这了,由于看书的时间本身就比较晚,之后写随笔的进度比较慢,远远落后于看书的进度。留下了点小尾巴,是关于 比较对象之间的相等性 的。

明天接着写运算符的重载。

  以后会争取每天写一点C#学习的内容分享,也希望大家一起努力,把C#发扬光大,哈哈。欢迎多多指教!

一起学习《C#高级编程》1--类型的安全性的更多相关文章

  1. Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程

    Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...

  2. (转)跟着老男孩一步步学习Shell高级编程实战

    原文:http://oldboy.blog.51cto.com/2561410/1264627/  跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  3. JavaScript高级编程——Date类型

    JavaScript高级编程——Date类型 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  4. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

  5. Java学习进阶—高级编程

    当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...

  6. python学习 面向对象高级编程

    ---恢复内容开始--- 面向对象编程---oop,是一种编程思想,oop把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数 ...

  7. 吴裕雄--天生自然 R语言开发学习:高级编程

    运行的条件是一元逻辑向量(TRUE或FALSE)并且不能有缺失(NA).else部分是可选的.如果 仅有一个语句,花括号也是可以省略的. 下面的代码片段是一个例子: plot(x, y) } else ...

  8. UC高级编程--实现myls程序

    跟着达内视频,学习UC高级编程,完毕程序小练习. 主要练习的函数为:  int lstat(const char *path, struct stat *buf);  size_t strftime( ...

  9. MVC高级编程+C#高级编程

    本人今年的目标是学习MVC高级编程和C#高级编程,把自己的基础打的扎实,本文中值是一个开到,定期会在上面记录学习的技术点和心得就,加油吧!!!!!

  10. IOS高级编程之一:多点触摸与手势验证

    前段时间学习了IOS基础的一些控件的使用作为基础,现在开始学习一些高级编程的东西,手势处理器.文件I/O.定位.网络通信.多线程这些,分享一些学习的重点,还是很实用的. 今天就先介绍个简单点得,手势处 ...

随机推荐

  1. java 工具类 static

    http://wenwen.sogou.com/z/q526955586.htm 工具类其实就是提供了一些公共的函数,方便其他类去调用,函数都写成static一方面是因为方便,另一方面是工具类的函数是 ...

  2. Python开发一个WEB聊天室

    项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加. ...

  3. 20165233 2017-2018-2 《Java程序设计》第七周学习总结

    20165233 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 ch11 下载XAMPP 基本操作:连接数据库 基础:查询操作,更新.添加与删除操作 重点: ...

  4. 机器视觉和Tesseract

    机器视觉 从 Google 的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广 泛且具有深远的影响和雄伟的愿景的领域. 我们将重点介绍机器视觉的一个分支:文字识别,介绍如何用一些 P ...

  5. 部分流媒体协议及流媒体开发框架vitamio

    流媒体协议部分RTP.RTCP.RTSP.MMS.HLS.HTTP progressive streaming   流媒体协议:(RTP.RTCP.RTSP.MMS.HLS.HTTP progress ...

  6. mysql中的blob和text区别

    经过查询资料发现 除了blob 还有tinyblob longblob mediumblob 当然text还有tinytext mediumtext longtext 都是最为大的存储 本质区别主要是 ...

  7. Eclipse去掉对jQuery的错误提示

    1.I have found that I can leave the JavaScript Validator enable and ignore specific files by adding ...

  8. SpringMVC 学习笔记(处理器映射器的配置)

    前端控制器(dispatchServlet) 在web.xml中配置前端控制器,在服务器启动时就被创建,用来对请求和响应进行接收 和 分发处理,其在配置时可以设置一个初始化参数,用来定位SpringM ...

  9. assetBundle打包脚本与LUA

    AssetBundles与脚本 所有Unity的AssetBundle,无论是从本地获取 还是www,或者打包整个场景.物体上的脚本都不会被编译.所以AssetBundle打包的时候即使物体上有脚本. ...

  10. re 正则模块

    re模块(* * * * *) 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列 ...