类型转换、类型安全以及is和as的使用
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的使用的更多相关文章
- NET基础(2):类型转换
CLR最重要的特性之一就是类型安全的.在运行时,CLR总是知道对象的类型是什么.调用GetType()方法可以知道对象的确切类型,由于它是非虚方法,所以一个类型不可能伪装成另一种类型.每种编程语言都规 ...
- c++ 类型安全
类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域.“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制:有的时候也用“类型安全”形容 ...
- 字符串流sstream[part3/使用字符串流进行安全的类型转换]
参考: http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/ http://www.cnblogs.com/games ...
- C++中四种类型转换方式
类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...
- C++新式类型转换
C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 新类型的强制转换可以提 ...
- C语言---类型转换
itoa 功 能:把一整数转换为字符串 用 法:char *itoa(int value, char *string, int radix); 详细解释:itoa是英文integer to array ...
- Matlab与.NET基于类型安全的接口混合编程入门
原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...
- .net 类型转换
在.net 平台下类型有两种方式可以进行类型转换,强转或as转换.(有的说法是两种方式都进行强转,有两种强转方式). 如:typeA objA = (typeA)objB 或者使用另一种typeA ...
- C# new关键字和对象类型转换(双括号、is操作符、as操作符)
一.new关键字 CLR要求所有的对象都通过new来创建,代码如下: Object obj=new Object(); 以下是new操作符做的事情 1.计算类型及其所有基类型(一直到System.Ob ...
随机推荐
- angular-file-upload插件的使用简单介绍
参考博客: https://www.cnblogs.com/jarson-7426/p/5191156.html angular-file-upload 最近一段时间用了一下angular-file- ...
- CTF中的AWD套路
今年参加了三起CTF比赛,属于初学者,基本除了web其他的不会,但分赛场AWD相对就没什么难度,基本都是技巧性.其中一场进入复赛了,本月底再次比赛(ctf题做的这么渣还能进也是绝了~),参照前人经验补 ...
- JS点击
本来是想做一个鼠标点击事件:A,B两个东西,B先隐藏,点击A,B出现,再点一次A,B消失,然后发现在判断不同的情况下,出现了一点小问题 暂时没有问题的写法: <!DOCTYPE html> ...
- 微信小程序のwxs语言
一.wxs介绍 wxs是微信小程序自身的脚本语言,用来过滤和计算.wxs可以通过文件可模块标签来定义 文件需要.wxs后缀文件 二.实例 <wxs module="test1" ...
- tomcat配置报错解决方法 The jre_home environment variable is not defined correctly
tomcat配置的时候弹出错误,The jre_home environment variable is not defined correctly,难道jre环境变量配置不正确?但是我们又可以执行j ...
- Sql批量修改语句
修改某个数字类型字段 SET @num = 10000000000001; #定义初始化变量参数 UPDATE ckys_me #更新的表 SET openid = (@num := @num+1) ...
- C++使用cout输出中文,打印出来是乱码
windows下的控制台使用的是gbk编码.你输出的是unicode.在Vs中更改高级保存选项,将Unicode改为GB类型(比如GB18030)
- Java高并发网络编程(一)
一.OSI网络七层模型 因特网是一个极为复杂的网络,分层有助于我们对网络的理解 .分层也是一种标准,为了使不同厂商的计算机能够互相通信,以便在更大范围内建立计算机网络,有必要建立一个国际范围的网络体系 ...
- 【转】SpringMVC整合websocket实现消息推送及触发
1.创建websocket握手协议的后台 (1)HandShake的实现类 /** *Project Name: price *File Name: HandShake.java *Packag ...
- Ruby——输入&输出
Ruby的输入和输出操作.输入是程序从键盘.文件或者其他程序读取数据.输出是程序产生数据.可以输出到屏幕.文件或者其他程序. Ruby中的一些类有些方法会执行输入&输出操作.例如Kernel. ...