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. linux shell unzip multiple zip files

    find . -name "*.result.zip" | xargs -n 1 unzip - -P password -d ../ext_logs

  2. Jenkins 搭建篇

    1.Jenkins 介绍 自动化运维工具:saltstack.jenkins.等.因为他们的目标一样,为了我们的软件.构建.测试.发布更加的敏捷.频繁.可靠 如果运维对git不熟,是无法做自动化部署. ...

  3. camunda流程部署的一些简单操作

    act_re_deployment:(流程部署对象表)存放流程部署的显示名和部署时间 act_re_procdef:(流程定义表)存放流程定义的属性信息 act_ge_bytearray:(资源文件表 ...

  4. Cocos2d-x之Node

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 节点是cocosd-x游戏引擎中的重要元素,是其他重要游戏元素的基类,例如,场景Scene,图层Layer,菜单Menu和精灵sprite ...

  5. mysql 密码

    http://www.cnblogs.com/jonsea/p/5510219.html character-set-server=utf8 mysql 修改密码: ALTER USER 'root' ...

  6. matlab中struct创建方法

    MATLAB中struct创建方法可分为:直接创建法和struct()函数创建法 (1)直接创建: 直接定义字段,像使用一般matlab变量一样,不需要事先声明,支持动态扩充.下面创建一个Studen ...

  7. 逻辑回归原理,推导,sklearn应用

    目录 逻辑回归原理,推导,及sklearn中的使用 1 从线性回归过渡到逻辑回归 2 逻辑回归的损失函数 2.1 逻辑回归损失函数的推导 2.2 梯度下降法 2.3 正则化 3 用逻辑回归进行多分类 ...

  8. 菩提圣心诀---zabbix自定义key监控oracle连接状态(python脚本)

    目的:此次实验目的是为了zabbix服务端能够实时监控某服务器上oracle实例能否正常连接 环境:1.zabbix_server 2.zabbix_agent(含有oracle) 主要知识点: 1. ...

  9. react textArea 高度不变化问题

    ref={el =>{ if(el){ el.textareaRef.style.height = el.textareaRef.scrollHeight + 'px'; } } }

  10. css 实现水波纹,波浪动画效果

    <div class="wave"> 水波纹效果 <div class="wave1"></div> <div cla ...