zoukankan      html  css  js  c++  java
  • 类型转换、类型安全以及is和as的使用

    class Program
        {
            static void Main(string[] args)
            {
                //1、类型转换
                {
                    //隐式转换:不需要转型,因为new返回一个Employee对象,而Object是Employee的基类型
                    object o = new Employee();
    
                    //显示转换:需要转型,因为Employee派生自Object
                    Employee employee = (Employee)o;
                }
    
                //2、类型安全
                {
                    //由于Manager是派生自Employee类型,运行正常
                    Manager m = new Manager();
                    PromoteEmployee(m);
    
                    //由于DateTime不是派生自Employee类型,运行时会抛出异常
                    //DateTime newYears = new DateTime(2019, 8, 25);
                    //PromoteEmployee(newYears);
                }
    
                //3、类型检查 is ,用is判断类型相比比较低
                /*
                 * 这是由于is操作符首先核实o是否兼容于Employee类型,再次核实o是否引用了一个Employee
                 * 
                 * is类型检查,永远不会抛出异常,结果只会返回 true  或 false
                 * 
                 * **/
                {
                    object o = new object();
                    if ((o is object))
                    {
    
                    }
                    if ((o is Employee))
                    {
    
                    }
                }
    
                //4、类型转换 as ,用as判断类型可提升其性能
                /*
                 * as 类型转换,如果类型转换成功,则返回对象,否则返回null,此转换方式也永远不会抛出异常
                 * 
                 * **/
                {
                    object o = new object();
                    Employee e = o as Employee;
                    if (e != null)
                    {
    
                    }
                }
    
                //5、类型转行 as ,测试
                {
                    object o = new object();
                    Employee e = o as Employee;
                }
    
                //6、类型转换小测试
                {
                    //编译错误,由于是显示转换,不一定成功
                    //B b1 = new object();
                    //D d1 = new object();
    
                    //运行错误,由于是显示转换,不一定成功
                    B b1 = new B();
                    D d1 = (D)b1;
    
                    //运行错误,由于是显示转换,不一定成功
                    object o = new object();
                    B b2 = (B)o;
                }
                Console.ReadKey();
            }
            //应该将Object参数类型改为Employee类型,这样在编译时就能报错
            static void PromoteEmployee(object o)
            {
                Employee e = (Employee)o;
            }
        }
        class D : B
        {
    
        }
        class B
        {
    
        }
        public class Manager : Employee
        {
        }
        public class Employee
        {
        }
  • 相关阅读:
    Oracle 获取本周、本月、本季、本年的第一天和最后一天(转载)
    easyui tabs页签显示在底部属性
    java mybatis XML文件中大于号小于号转义(转载)
    原生JS日历 + JS格式化时间格式
    ajax之async属性
    Easyui 行编辑
    css中实现显示和隐藏(转)
    layer弹出层 获取index
    js中关于json常用的内容、js将数字保留两位小数
    发布项目到github上web服务器来运行
  • 原文地址:https://www.cnblogs.com/lishuyi/p/11408847.html
Copyright © 2011-2022 走看看