C# is与as
1、使用场景:
强制类型转换,有可能会导致异常。is与as就是为了解决这一问题,is与as永远不会抛出异常。
2、is判断一个对象是否兼容于指定的类型,考虑里氏代换。Dog是Animal,而Animal不是Dog。
3、as 与强制类型转换一样,区别是使用as是安全的。使用as如果转换失败,返回Null,不会抛出异常。
4、使用is和as可以取代强制类型转换,分别如下:
a、使用is
if(a is Dog)
{
Dog d = (Dog)a;
...
} b、使用as
Dog d = a as Dog;
if(d!=null)
{
...
}
注意:二者效果一样,但是效率差别很大,使用is会检查两次对象的类型,一次是核实,一次是强制转换。使用as只进行了一次对象类型的检查。检查对象的类型,是个耗费资源的操作,首先要判断对象的实际类型,然后必须遍历继承树结构(层次结构),去与每个基类核对。
5、这个情况类似于C++的中map。在C++中,标准容器map的下标操作有一个危险的副作用,如果该键不存在,下标操作会插入一个具有该键的新元素,新元素的value使用默认构造方法。考虑下面的需求:根据key查找value,存在key,返回value,不存在key,返回null。为了避免出现上面的副作用,使用下面的办法:
a、使用count
if(m.count(key)>)
{
return m[key];
}
else
{
return null;
} b、使用find
map<int,string>::iterator iter = m.find(key);
if(iter!=m.end())
{
return *iter;
}
else
{
return null;
}
使用count,进行了两次查找。使用find只进行了一次查找。map 的内部实现使用了二叉树(AVL树或者红黑树),查找的时间效率为对数时间,会影响效率。因此,对于需求,根据key查找value,如果存在就使用,应该使用find。
随机推荐
- 你所不知道的 URL
0.说明 第一幕 产品:大叔有用户反映账户不能绑定公众号.大叔:啊咧咧?怎么可能,我看看?大叔:恩?这也没问题啊,魏虾米.大叔:还是没问题啊,挖叉类.大叔:T T,话说产品姐姐是不是Java提供接口的 ...
- iOS 怎么样给自己的app打分呢?
NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@",@&quo ...
- [selenium webdriver Java]元素定位——findElement/findElements
策略 语法 语法 描述 By id driver.findElement(By.id()) driver.findElements(By.id()) 通过id属性定位元素 By name driver ...
- 有关SQLite的substr函数的笔记
官方参考文档:SQLite Query Language: Core Functions http://www.sqlite.org/lang_corefunc.html 测试SQL语句: ,) AS ...
- 向Window BCD 文件添加VHD开机启动项的相关笔记
******************************************************************************** * BCD_YE_MIN文件说明:(精 ...
- 仿酷狗音乐播放器开发日志二十七 用ole为窗体增加文件拖动功能(附源码)
转载请说明原出处,谢谢~~ 中秋到了,出去玩了几天.今天把仿酷狗程序做了收尾,已经开发完成了,下一篇博客把完结的情况说一下.在这篇博客里说一下使用OLE为窗体增加文件拖拽的功能.使用播放器,我更喜欢直 ...
- 【Windows核心编程】重载类成员函数new / new[] / delete / delete[]
// Heap.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include &l ...
- OnItemClickListener 的参数详解(转)
转载地址:http://blog.iamzsx.me/show.html?id=147001 我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget. ...
- mysql操作时遇到的小问题
mysql数据库在程序中执行sql语句时,或者在执行sql时,数据库表可能会有一些特殊的字符,比如说#,.等,这样在执行时 可能会遇到问题 如以下的表名,backup_2014.2.22, 这个表在查 ...
- PowerMock简介
PowerMock 写单元测试可能有些难.有时仅仅为了可测试性的目标而不得不牺牲好的设计.通常可测试性和好的测试之间是一致的,但是并不总是如此.比如,由于现存框架的限制,final classes.m ...