.NET中的 类型转换深入理解
CLR最重要的一个特性就是类型安全。CLR在运行时总能知道一个对象的类型。我们也可以通过调用GetType()方法,来得到对象的准确类型。因为该方法是一个非虚方法,所以我们不可能利用它来篡改一个类型的信息。(Microsoft.NET 框架程序设计<修订版>p117)
public class Employee
{
string name= string.Empty;
float age = -1;
public override string ToString()
{
return "name = "+name +" and age = "+age;
}
}
Employee e = new Employee();
object oe = e as object;
if(oe == null)
{
Console.WriteLine("oe is null");
}
Console.WriteLine("oe's type is : {0}",oe.GetType());
通过以上,应该可以明白“CLR在运行时总能知道一个对象的类型。”了。
as 操作符提供了对左边实例到右边类型的兼容性检验,如果兼容,即左边实例可以转换为右边类型的对象,则返回此对象的引用,否则返回null。除了as操作符之外,C#中还提供了is 操作符,它也提供了对左边实例与右边类型的兼容性检验,只不过当检验结果兼容时,它返回的是true,否则返回false,因此,它还需要额外的显示操作,以完成转换。所以相对比较起来,as操作符效率更高些。此外,两个操作符运行过程中,都不会抛出异常。但是as操作符要求对转换过的对象增加是否为null引用的判断,以防止转换不成功时,对空引用操作。
由于as操作符在检验结果不兼容时,会返回null,因此,as操作符不可以把实例与值类型相检验,否则编译不通过。因为值类型不能赋值为null(?除外).
相关推荐
-
.NET中的 类型转换深入理解
CLR最重要的一个特性就是类型安全.CLR在运行时总能知道一个对象的类型.我们也可以通过调用GetType()方法,来得到对象的准确类型.因为该方法是一个非虚方法,所以我们不可能利用它来篡改一个类型的信息.(Microsoft.NET 框架程序设计<修订版>p117) 我们定义如下类: 复制代码 代码如下: public class Employee { string name= string.Empty; float age = -1; public over
-
17道题让你彻底理解JS中的类型转换
前言 类型转换是将值从一种类型转换为另一种类型的过程(比如字符串转数字,对象转布尔值等).任何类型不论是原始类型还是对象类型都可以进行类型转换,JavaScript 的原始类型有:number, string, boolean, null, undefined, Symbol. 本文将通过 17 道题目来深入的了解 JS 中的类型转换,通过阅读本文之后,你将能自信的回答出下面题目的答案,并且能够理解背后的原理.在文章的最后,我讲写出答案并解释.在看答案之前,你可以把答案写下来,最后再对照一下,便
-
浅谈Java中强制类型转换的问题
为了更好的理解我们先看下面的例子: package com.yonyou.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 测试类 * @author 我们 * @创建日期 2016-5-31 */ public class Test{ public static void main(String[] args) { List<String> list=new Ar
-
详解解密Java中的类型转换问题
众所周知Java中的数据类型是强数据类型,基本数据类型之间的转换尤其固定的规则,当数据宽度比较窄的数据类型(如int)转换成数据类型比较宽的数据类型时(如double),则窄的数据类型会加宽,可以完成自动类型转换,这称为隐式转换. 如:以下代码没有任何问题,结果也是正确的,成绩不会发生变化,所不同的是成绩的精度提高了. intintScore = 96; doubledoubleScore = intScore; 那么如果试图把宽的数据类型(如double)转换成窄的数据类型(如float)时,
-
对Java中传值调用的理解分析
本文实例分析了Java中的传值调用.分享给大家供大家参考.具体分析如下: Java以引用的方式操作对象实例 可以确认的是Java中操作对象的方式是以引用的方式操作对象.为了更深刻的了解这点我写了如下代码: 首先定义一个自定义类型 复制代码 代码如下: public class Person { String name; Person(String name){ this.name = name; } } 这里name默认是
-
浅析JS中常用类型转换及运算符表达式
JS中的常用类型转换(一般用强制转换): 1.强制转为整数:parseInt:写法:x = parseInt(x); 2.强制转换位小为:parseFloat:写法:x = parseFloat(x); 3.检测类型:x = parseInt(x); alert(typeof(true)); JS中常用的运算符表达式: 1.逻辑运算符(布尔型):&& 并 :|| 或 :! 非 : 2.比较运算符:==(等于) :!=(不等于) : > :< :>=(大于等于)
-
深入浅析JavaScript中with语句的理解
JavaScript 有个 with 关键字, with 语句的原本用意是为逐级的对象访问提供命名空间式的速写方式. 也就是在指定的代码区域, 直接通过节点名称调用对象. with语句的作用是暂时改变作用域链.减少的重复输入. 其语法结构为: with(object){ //statements } 举一个实际例子吧: with(document.forms[]){ name.value = "lee king"; address.value = "Peking";
-
SQL SERVER中强制类型转换cast和convert的区别详解
SQL SERVER中强制类型转换cast和convert的区别 在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. select CAST('123' as int) -- 123 select CONVERT(int, '123') -- 123 select CAST(123.4 as int) -- 123 select CONVERT(int, 123.4) --
-
C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结
前言 这篇文章总结的是C++中的类型转换,这些小的知识点,有的时候,自己不是很注意,但是在实际开发中确实经常使用的.俗话说的好,不懂自己写的代码的程序员,不是好的程序员:如果一个程序员对于自己写的代码都不懂,只是知道一昧的的去使用,终有一天,你会迷失你自己的. C++中的类型转换分为两种: 1.隐式类型转换: 2.显式类型转换. 而对于隐式变换,就是标准的转换,在很多时候,不经意间就发生了,比如int类型和float类型相加时,int类型就会被隐式的转换位float类型,然后再进行相加运算.而关
-
老生常谈Java中instanceof关键字的理解
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: result = object instanceof class 参数: Result:布尔类型. Object:必选项.任意对象表达式. Class:必选项.任意已定义的对象类. 说明: 如果 object 是 class 的一个实例,则 instanceof 运算符返回 true.如果 object
随机推荐
- Android实现QQ图片说说照片选择效果
- 代码着色之SyntaxHighlighter项目(最流行的代码高亮)
- 十个新年banner,祝大家新年快乐!
- VBS教程:VBscript语句-Execute 语句
- TortoiseSVN使用教程
- bootstrap下拉列表与输入框组结合的样式调整
- JavaScript使用循环和分割来替换和删除元素实例
- jquery.jstree 增加节点的双击事件代码
- 使用ionic在首页新闻中应用到的跑马灯效果的实现方法
- 利用phpexcel把excel导入数据库和数据库导出excel实现
- MYSQL实现添加购物车时防止重复添加示例代码
- Mysql数据库命令大全
- 在IE模态窗口中自由查看HTML源码的方法
- 基于JavaScript实现一定时间后去执行一个函数
- js学习笔记之事件处理模型
- javascript运行机制之this详细介绍
- 常用js脚本
- Android 消息队列模型详解及实例
- DVD刻录机使用教程之硬件安装篇图文教程
- Cisco路由器故障诊断技术重新编辑