zoukankan      html  css  js  c++  java
  • 类型转换

    类型转换

    1.       CLR中,我们经常会使用到类型的转换,然而在转换的过程中,我们往往会忽视类型转换中所带给我们的危险  即转换安全问题。它即影响了软件的性能,也影响了应用程序的健壮性和不稳定性。

    通过这个小程序来说明问题吧:

    class Program

        {

            static void Main(string[] args)

            {

                Dog dog = new Dog();

                WangWang(dog);

                //DataTime也是Object 的派生类

                DateTime time = new DateTime();

              

                    WangWang(time);

              

            }

            //狗叫

            private static void WangWang(Object o)

            {

                //编译的过程中,CLR会获知这个o的类型  所以会编译通过

               

                Animal animal = (Animal)o;

            }

        }

        /// <summary>

        /// 动物类

        /// </summary>

        class Animal

        {

     

        }

        /// <summary>

        /// Dog派生类

        /// </summary>

        class Dog : Animal

        {

     

    }

    我写了一个Animal的基类,Dog类是Animal的派生类,在这里,我想让狗狗叫起来,给它一个WangWang的动作,在叫的同时,我把它传给了对象Object,这个是不会引发异常的,因为dog类是animal 的派生类,而且在编译的过程中CLR也是不会理会的,  不过在把DataTime类型传给Wangwang时候,则是会出现异常,指类型无法转换,这个是显然易见的。

    2.展开话题   C#就出现了is   as

    只有用到了 才感觉到它的好处。

               Object o = new Object();

                if (o is DateTime)

                {

                    WangWang(time)

                  }

    在上面的例子中, 我用到了is来给它判断类型是否兼容,返回判断的结果,是就返回ture 反之则是false。不过, 我发现,在判断的同时,这咯代码要判断两次,首先是判断类型是否兼容,其次又会检查其引用,这样很是麻烦

    as的用法减轻了程序的负担,

        Animal animal=o as time;

    If(animal!=null)

    {

        ………

    }

    As是通过检查类型是否兼容,如果兼容,返回一同一个对象的非空指针,如果不兼容则是返回null. as只检查了一次,is则是检查了两次(呵呵,终于明白了它们的区别)。

  • 相关阅读:
    svn服务器安装
    flex 协同
    大尾端 小尾端
    UNIX下c语言的图形编程curses.h 函式库(2)
    vs2005设置
    client 连接 host —— 虚拟机
    fedora 连网问题。。
    pv ip uv
    checking for XML::Parser... configure: error: XML::Parser perl module is required for intltool
    UNIX下c语言的图形编程curses.h 函式库
  • 原文地址:https://www.cnblogs.com/renjie/p/1409034.html
Copyright © 2011-2022 走看看