zoukankan      html  css  js  c++  java
  • [你必须知道的.NET] 第一回:恩怨情仇:is和as

    本文将介绍以下内容:

      • 类型转换

      • 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。

      其典型用法为:

    Code
    object o = new object();
    class A
    {
    }
    if (o is A) //执行第一次类型兼容检查
    {
    A a
    = (A) o; //执行第二次类型兼容检查
    }

      as的规则如下:

      • 检查对象类型的兼容性,并返回结果,如果不兼容就返回null;

      • 不会抛出异常;

      • 如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常。

      其典型用法为:

    Code
    object o = new object();
    class B
    {

    }
    B b
    = o as B; //执行一次类型兼容检查
    if (b != null)
    {
    MessageBox.Show(
    "b is B's instance.");
    }

      4. 结论

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

    转自:http://kb.cnblogs.com/list/42295/

  • 相关阅读:
    (转载)SAPI 包含sphelper.h编译错误解决方案
    C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)
    504. Base 7(LeetCode)
    242. Valid Anagram(LeetCode)
    169. Majority Element(LeetCode)
    100. Same Tree(LeetCode)
    171. Excel Sheet Column Number(LeetCode)
    168. Excel Sheet Column Title(LeetCode)
    122.Best Time to Buy and Sell Stock II(LeetCode)
    404. Sum of Left Leaves(LeetCode)
  • 原文地址:https://www.cnblogs.com/greatandforever/p/1604440.html
Copyright © 2011-2022 走看看