类型测试和转换运算符(C# 引用)

可以使用以下运算符来执行类型检查或类型转换:

    is 运算符:用于检查表达式的运行时类型是否与给定类型兼容
    as 运算符:用于将表达式显式转换为给定类型(如果其运行时类型与该类型兼容)
    强制转换运算符 ():用于执行显式转换
    typeof 运算符:用于获取某个类型的 System.Type 实例

is转换规则:

1. 检查对象类型的兼容性,并返回结果true(false);
2.不会抛出异常;
3.如果对象为null,刚返回false;

示例:


 object o = "abc"; if (o is string) //执行第一次类型兼容性检查 
{ 
string s = (string)o; //执行第二次类型兼容性检查,并转换 
MessageBox.Show("转换成功!"); 
} 
else { 
MessageBox.Show("转换失败!"); 
}
as转换规则:

1.检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;
2.不会抛出异常;
3.如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;

示例:
 object o = "abc"; string s = o as string; //执行第一次类型兼容性检查,并返回结果 
if (s != null) 
MessageBox.Show("转换成功!"); 
else 
MessageBox.Show("转换失败!");
注:as比is少执行一次兼容性检查,性能可能会高一点点。

装箱是将值类型转换为object类型或由此值类型实现的任何接口类型的过程。当CLR对值类型进行装箱时,会将该值包装到System.Object内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型

  装箱是隐式的;取消装箱是显示的。

  装箱和取消装箱的概念是类型系统C#统一视图的基础,其中任一类型的值都被视为一个对象。

装箱性能相关(以Unity中Debug.Log(object)函数为例)

考虑一种基本的装箱情况,当使用Debug.Log(object)函数时,函数的参数类型为object,也就意味着任何类型的变量都能传递给这个函数。例如当我们传递一个整数的时候,编译器将会对传递进来的整数进行装箱操作使其变成object类型,而我们知道装箱操作是需要耗费一点时间的,那么我们可以通过预见装箱操作来对其做一定的优化工作。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值