[你必须知道的.NET] 第一回:恩怨情仇:is和as

发布日期:2007.4.7 作者:Anytao

©2007 Anytao.com 转贴请注明出处,留此信息。

 

本文将介绍以下内容:

• 类型转换

• is/as操作符小议 

1. 引言 

类型安全是.NET设计之初重点考虑的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题。现在,这一切已经在微软大牛们的设计框架中为你解决了。在.NET中,一切类型都必须集成自System.Object类型,因此我们可以很容易的获得对象的准确类型,方法是:GetType()方法。那么.NET中的类型转换,应该考虑的地方有那些呢?

2. 概念引入

类型转换包括显示转换和隐式转换,在.NET中类型转换的基本规则如下:

  • 任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成;
  • 任何类型转换为其派生类型时,必须进行显示转换,转换的规则是:(类型名)对象名;
  • 使用GetType可以取得任何对象的精确类型;
  • 基本类型可以使用Covert类实现类型转换;
  • 除了string以外的其他类型都有Parse方法,用于将字符串类型转换为对应的基本类型;
  • 值类型和引用类型的转换机制称为装箱(boxing)和拆箱(unboxing)。

3. 原理与示例说明

浅谈了类型转换的几个普遍关注的方面,该将主要精力放在is、as操作符的恩怨情仇上了。类型转换将是个较大的话题,留于适当的时机讨论。

is/as操作符,是C#中用于类型转换的,提供了对类型兼容性的判断,从而使得类型转换控制在安全的范畴,提供了灵活的类型转换控制。

is的规则如下:

  • 检查对象类型的兼容性,并返回结果,true或者false;
  • 不会抛出异常;
  • 如果对象为null,则返回值永远为false。

其典型用法为:

 1None.gifobject o = new object();
 2None.gif
 3None.gifclass A
 4None.gif
 5ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 6InBlock.gif
 7ExpandedBlockEnd.gif}

 8None.gif
 9None.gifif (o is A)  //执行第一次类型兼容检查
10None.gif
11ExpandedBlockStart.gifContractedBlock.gifdot.gif{
12InBlock.gif
13InBlock.gif  A a = (A) o;  //执行第二次类型兼容检查
14InBlock.gif
15ExpandedBlockEnd.gif}

16None.gif
17None.gif

 as的规则如下:

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

其典型用法为: 

 1None.gifobject o = new object();
 2None.gif
 3None.gifclass B
 4None.gif
 5ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 6InBlock.gif
 7ExpandedBlockEnd.gif}
 8None.gif
 9None.gifB b = o as B;  //执行一次类型兼容检查
10None.gif
11None.gifif (b != null)
12None.gif
13ExpandedBlockStart.gifContractedBlock.gifdot.gif{  
14InBlock.gif
15InBlock.gif  MessageBox.Show("b is B's instance.");
16InBlock.gif
17ExpandedBlockEnd.gif}

18None.gif
19None.gif

4. 结论

纵上比较,is/as操作符,提供了更加灵活的类型转型方式,但是as操作符在执行效率上更胜一筹,我们在实际的编程中应该体会其异同,酌情量才。 
MyBanner.jpg
参考文献

(USA)Jeffrey Richter, Applied Microsoft .NET Framework Programming

 (USA) Stanley B. Lippman, C# Primer

 

©2007 Anytao.com 转贴请注明出处,留此信息。

本贴子以现状提供且没有任何担保,同时也没有授予任何权利。
This posting is provided "AS IS" with no warranties, and confers no rights.

转载于:https://www.cnblogs.com/anytao/archive/2007/04/07/must_net_01.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取当前鼠标的位置以及组件的位置

总结: div如果要触发鼠标事件要加上css样式cusor:pointer。 更多专业前端知识,请上 【猿2048】www.mk2048.com

谷歌推大语言模型VideoPoet:文本图片皆可生成视频和音频

Google Research最近发布了一款名为VideoPoet的大型语言模型(LLM),旨在解决当前视频生成领域的挑战。该领域近年来涌现出许多视频生成模型,但在生成连贯的大运动时仍存在瓶颈。现有领先模型要么生成较小的运动,要么在生…

PyCon大会Python主题演讲摘要

PyCon 是全国际最大的以 Python 编程言语 为主题的技能大会。大会由 Python 社区组织,每年举行一次。在大会上,来自国际各地的 Python 用户与中心开发者齐聚一堂,共同同享 Python 国际的新鲜事、Python 言语的应用案例、运用技巧等等内容。 I…

欢迎使用Java 8之前要重温的10个JDK 7功能

Java 8发布已经快一个月了,我敢肯定,大家都在探索JDK 8的新功能。但是,在您完全研究Java 8之前,是时候重新审视Java 7上引入的一些很棒的功能了。记住,Java 6并没有什么功能,它只与JVM的更改和性能有关&…

java版本号管理_微服务项目中如何管理依赖版本号?

本文是微服务项目代码组织形式三部曲中的第三篇,也是最后一篇,通过这三篇文章,相信大家对于如果组织微服务中的代码已经有了一个基本认知,前面两篇分别是:第三篇相对来说要简单一些,本来没打算写&#xff0…

对于刚开始使用该软件,应该在熟悉基本的markdown语法的基础上,再进行快捷键的使用!...

一级标题 # 空格 编写内容 二级标题 ## 空格 编写内容 有序内容 1.Tab 无序内容 -Tab 代码块 print("hello wrold") typora快捷键 ctrl1一级标题 添加图片 表格 CtrlT 姓名年龄职业谢国宏20IT文字加粗 24期的小伙伴们你们好 文字斜体 你好 又粗又斜 粗斜* 3**2 -- 幂…

struct和byte[]相互转换(用Marshal类实现)

转自[DotNet笔记]相当于序列化与反序列化,但是不用借助外部文件1、struct转换为byte[] 1staticbyte[] StructToBytes(objectstructObj) 2{ 3 int size Marshal.SizeOf(structObj); 4 IntPtr buffer Marshal.AllocHGlobal(size); 5 …

Get-CrmSetting返回Unable to connect to the remote server的解决办法

摘要: 微软动态CRM专家罗勇 ,回复302或者20190125可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me 。 在Dynamics 365部署管理器所在的服务器上执行Get-CrmSetting,最近…

java 二维数组奇数金字塔_二维数组:奇数阶魔方 | 新思维:C语言程序设计

幻方,有时又称魔方,由一组排放在正方形中的整数组成,其每行、每列以及两条对角线上的数之和均相等。通常幻方由从到的连续整数组成。Siamese方法(Kraitchik 1942年,pp. 148-149)是构造奇数阶幻方的一种方法,说明如下&a…

拷贝构造函数与赋值函数(运算符重载)(1)

拷贝构造函数拷贝构造函数在三种情况下会被使用1.使用对象来初始化对象时2.当函数的形参是对象时3.当函数的返回值为对象时 2,3情况的本质还是1 //Test1.h #include<iostream> using namespace std; class ST { private:int a;long b; public:ST(int a0, long b0):a(a),…

GOOGLE不让我访问啦?

GOOGLE不让我访问啦? 今天上GOOGLE出现了这么一个画面,可是我就是不知道我的电脑到底中了什么毒,平常我没上什么特殊的网站,也没下载什么软件,因为这电脑我只用来做些基本的开发和看看园子里的文章而已.真不知道是怎么一回事.posted on 2007-05-05 12:46 黄尚 阅读(...) 评论(…

java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?

方法1&#xff1a;通过Thread类中的isAlive()方法判断线程是否处于活动状态。线程启动后&#xff0c;只要没有运行完毕&#xff0c;都会返回true。【注】如果只是要等其他线程运行结束之后再继续操作&#xff0c;可以执行t.join()&#xff0c;即&#xff1a;在t执行完毕前挂起。…

大数据分析和人工智能科普

一、大数据 1.1 大数据&#xff08;Big Data&#xff09; 众说纷纭&#xff01; 个人认为&#xff0c;大数据中的“大”&#xff0c;不仅仅是涉及数据规模&#xff0c;而且包含“价值“这个层面。其实无非就是大量的信息罢了&#xff0c;但是我们却能 通过各种手段从这些信息中…

Redis API的使用与理解

一、Redis 基础&#xff1a; 1、通用命令&#xff1a; keys [pattern]&#xff1a; keys * #遍历所有key&#xff1b;keys he* #以he开头的key&#xff1b; keys he[a-e]* #以‘he’开头第三个字母是a-e之间&#xff1b; keys ph? #?代码一位&#xff0c;以ph开头且字母是…

点击底部input输入框,弹出的软键盘挡住input(苹果手机使用第三方输入法 )

测试移动端页面的时候&#xff0c;偶然发现点击底部input输入框时&#xff0c;弹出的虚拟键盘偶尔会挡住input输入框。 输入框固定在页面底部&#xff0c;如图所示&#xff1a; input固定底部设计图.png点击底部input输入框唤起软键盘时&#xff0c;软键盘挡住输入框。如图所示…

java采集温湿度水浸_机房水浸传感器:智能生活不可或缺的漏水传感器

原标题&#xff1a;机房水浸传感器&#xff1a;智能生活不可或缺的漏水传感器智能化的飞速发展让人们的生活发生了重大改变&#xff0c;为保证机房的安全、稳定、高效运行&#xff0c;网络设备的良好运行状态和设备使用寿命与安全&#xff0c;通常会对网络运行环境的电力供应、…

创建型模式:原型模式

个人公众号原文&#xff1a;创建型模式&#xff1a;原型模式 五大创建型模式之五&#xff1a;原型模式。 简介 姓名 &#xff1a;原型模式 英文名 &#xff1a;Prototype Pattern 价值观 &#xff1a;效率第一 个人介绍 &#xff1a; Specify the kinds of objects to create u…

我的前端工具集(五)提示工具之模态窗提示

我的前端工具集&#xff08;五&#xff09;提示工具之模态窗提示 liuyuhang原创&#xff0c;未经允许禁止转载 目录 我的前端工具集 1、需求 很多页面操作都需要提示&#xff0c;比如操作成功&#xff0c;操作失败之类。 总不能没事就console.log或者alert吧。 所以一个操作提…

Java 8 Friday:可选将保留为Java中的一个选项

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

七天开发记录(3)

今天在网上找到了一个开发记账本微信小程序的网址 我看了一下这个APP的源代码&#xff0c;其用分为两个大包。 转载于:https://www.cnblogs.com/zjl-0217/p/10428525.html