类型转换类型安全以及is和as的使用

Posted lishuyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型转换类型安全以及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
    
    

 

以上是关于类型转换类型安全以及is和as的使用的主要内容,如果未能解决你的问题,请参考以下文章

4.2 类型转换

类型检测与类型转换:"is" 与 "as"

Kotlin类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )

Kotlin类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )

类型转换的那些趣事(is和as)

swift--使用 is 和 as 操作符来实现类型检查和转换