class Program
{
static void Main(string[] args)
{
//1、类型转换
{
//隐式转换:不需要转型,因为new返回一个Employee对象,而Object是Employee的基类型
object o = new Employee(); //显示转换:需要转型,因为Employee派生自Object
Employee employee = (Employee)o;
} //2、类型安全
{
//由于Manager是派生自Employee类型,运行正常
Manager m = new Manager();
PromoteEmployee(m); //由于DateTime不是派生自Employee类型,运行时会抛出异常
//DateTime newYears = new DateTime(2019, 8, 25);
//PromoteEmployee(newYears);
} //3、类型检查 is ,用is判断类型相比比较低
/*
* 这是由于is操作符首先核实o是否兼容于Employee类型,再次核实o是否引用了一个Employee
*
* is类型检查,永远不会抛出异常,结果只会返回 true 或 false
*
* **/
{
object o = new object();
if ((o is object))
{ }
if ((o is Employee))
{ }
} //4、类型转换 as ,用as判断类型可提升其性能
/*
* as 类型转换,如果类型转换成功,则返回对象,否则返回null,此转换方式也永远不会抛出异常
*
* **/
{
object o = new object();
Employee e = o as Employee;
if (e != null)
{ }
} //5、类型转行 as ,测试
{
object o = new object();
Employee e = o as Employee;
} //6、类型转换小测试
{
//编译错误,由于是显示转换,不一定成功
//B b1 = new object();
//D d1 = new object(); //运行错误,由于是显示转换,不一定成功
B b1 = new B();
D d1 = (D)b1; //运行错误,由于是显示转换,不一定成功
object o = new object();
B b2 = (B)o;
}
Console.ReadKey();
}
//应该将Object参数类型改为Employee类型,这样在编译时就能报错
static void PromoteEmployee(object o)
{
Employee e = (Employee)o;
}
}
class D : B
{ }
class B
{ }
public class Manager : Employee
{
}
public class Employee
{
}

类型转换、类型安全以及is和as的使用的更多相关文章

  1. NET基础(2):类型转换

    CLR最重要的特性之一就是类型安全的.在运行时,CLR总是知道对象的类型是什么.调用GetType()方法可以知道对象的确切类型,由于它是非虚方法,所以一个类型不可能伪装成另一种类型.每种编程语言都规 ...

  2. c++ 类型安全

    类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域.“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制:有的时候也用“类型安全”形容 ...

  3. 字符串流sstream[part3/使用字符串流进行安全的类型转换]

    参考: http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/ http://www.cnblogs.com/games ...

  4. C++中四种类型转换方式

    类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...

  5. C++新式类型转换

    C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 新类型的强制转换可以提 ...

  6. C语言---类型转换

    itoa 功 能:把一整数转换为字符串 用 法:char *itoa(int value, char *string, int radix); 详细解释:itoa是英文integer to array ...

  7. Matlab与.NET基于类型安全的接口混合编程入门

    原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...

  8. .net 类型转换

    在.net  平台下类型有两种方式可以进行类型转换,强转或as转换.(有的说法是两种方式都进行强转,有两种强转方式). 如:typeA objA = (typeA)objB 或者使用另一种typeA ...

  9. C# new关键字和对象类型转换(双括号、is操作符、as操作符)

    一.new关键字 CLR要求所有的对象都通过new来创建,代码如下: Object obj=new Object(); 以下是new操作符做的事情 1.计算类型及其所有基类型(一直到System.Ob ...

随机推荐

  1. 33. 构建第一个job

    1.点击 New Item 2.Enter an item name 输入一个name,点击Freestyle project 3.我们可以输入一个描述,点击Advanced 4.勾选Use cust ...

  2. 【狼】unity3d 安卓播放视频替代视频纹理

    http://www.cnblogs.com/zhanlang96/p/3726684.html 原创,有问题或错误的话希望大家批评指正 导出apk,是不能用电影纹理的,所以我们只能用这个办法 这个 ...

  3. 制作 macOS High Sierra U盘

    制作 macOS High Sierra U盘USB启动安装盘方法教程 (全新安装 Mac 系统) 随着苹果 macOS High Sierra 正式版发布,很多使用 Mac 电脑的同学都已升级到最新 ...

  4. 13-python基础—python3中的map()

    map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表. 通俗解释: m ...

  5. SpringBoot传递单一参数时@RequestParam和@RequestBody的区

    用SpringBoot框架做项目时,经常需要前端给后端传递参数,如果需要多条参数,通常的做法是把这些参数封装为一个对象来传递,前端用POST方式调用.但有时会遇到后端只需要一条参数(比如一个Strin ...

  6. 关于Oracle中Sort Merge Join的改写

    业务场景的问题,我们有一个刷CUBE的SQL,是Oracle环境,平时跑70多分钟, 但是最近突然不动了,这个SQL需要算累计值,比如年累计客户数量. 累计值是什么意思呢?我们使用下面的数据来说明问题 ...

  7. axure破解版

    axure 破解版   https://www.cnblogs.com/lianghong/p/9385233.html   授权: zdfans.com 注册码:  gP5uuK2gH+iIVO3Y ...

  8. 微信小程序の微信js

    一.Javascript简介 二.nodejs中的jscript nodejs表示谷歌基于v8引擎的一门后端语言, ECMA表示ECMA262标准的基本js,native表示nodejs本身的一些包, ...

  9. yum 命令跳过特定(指定)软件包升级方法

    今天在更新rhel的时候,遇到了yum update 更新失败,一些包的依赖关系有问题,报出了需要rpm_check_debug的信息. 我man 一下rpm的命令没有看到check相关的选项,也就没 ...

  10. 2019南昌邀请赛预选赛 I. Max answer (前缀和+单调栈)

    题目:https://nanti.jisuanke.com/t/38228 这题题解参考网上大佬的. 程序的L[i],R[i]代表a[i]这个点的值在区间 [L[i],R[i]] 中最小的并且能拓展到 ...