zoukankan      html  css  js  c++  java
  • 18. C# 转换

    1.重载转换运算符

    到目前为止,我们使用的类型转换,包括隐式类型转换和显示类型转换都是在两个相关的类中进行的,这几个类要么是简单类型之间的转换,比如int 隐式转换成double,要么是有继承关系,或者是实现了接口。假如我们要在两个不相关的类之间进行转换,可以重载转换运算符。

        class ConvClass1
        {
            public int Val;
    
            /// <summary>
            /// 定义ConvClass2隐式转换为ConvClass2的方式
            /// </summary>
            /// <param name="c1"></param>
            /// <returns></returns>
            public static implicit operator ConvClass2(ConvClass1 c1)
            {
                ConvClass2 c = new ConvClass2();
                c.Val = c1.Val;
                return c;
            }
        }
    
        class ConvClass2
        {
            public double Val;
    
            /// <summary>
            /// 定义ConvClass2显示式转换为ConvClass1的方式
            /// </summary>
            /// <param name="c1"></param>
            /// <returns></returns>
            public static explicit operator ConvClass1(ConvClass2 c1)
            {
                ConvClass1 c = new ConvClass1();
                checked { c.Val = (int)c1.Val; }
                return c;
            }
        }
    
        class Program
        {
    
            static void Main(string[] args)
            {
    
                ConvClass1 c1 = new ConvClass1();
                c1.Val = 5;
                ConvClass2 c2 = c1;//ConvClass1隐式转换为ConvClass2
    
                ConvClass2 d = new ConvClass2();
                d.Val = 8.88;
                ConvClass1 d1 = (ConvClass1)d;//ConvClass2显示转换为ConvClass1,如果val的值超过了int的范围会引发一个报错
    
                Console.ReadLine();
            }
        }

    2.as运算符

    as运算符把一种类型转换为指定的引用类型,如果不能转换返回null,as 运算符只使用以下几种情况:

    <operand> as <type>

    1)<operand>的类型是<type>;

    2) <operand>可以隐式转换为<type>;

    3)<operand>可以封箱为<type>。

        class Program
        {
    
            static void Main(string[] args)
            {
                D d = new D();
                A a = d;
    
                D dd = a as D;//a 是D类型,可以转换
    
                MyInterface i = a as MyInterface;// a 可以隐式转换成MyInterface
    
                int j = 1;
                object o = j as object;//j可以封箱为object 
    
                Console.ReadLine();
            }
        }
    
        interface MyInterface
        { }
    
        class A : MyInterface
        { 
        
        }
    
        class D : A { }

    as运算符非常有用,因为一般的类型转换如果转换不了会抛出异常,需要处理异常,as 运算符如果转换不了返回null,只需要判断是不是null就可以了,少了处理异常的代码。

  • 相关阅读:
    每日总结2021.9.14
    jar包下载mvn
    每日总结EL表达语言 JSTL标签
    每日学习总结之数据中台概述
    Server Tomcat v9.0 Server at localhost failed to start
    Server Tomcat v9.0 Server at localhost failed to start(2)
    链表 java
    MVC 中用JS跳转窗体Window.Location.href
    Oracle 关键字
    MVC 配置路由 反复走控制其中的action (int?)
  • 原文地址:https://www.cnblogs.com/lidaying5/p/10606507.html
Copyright © 2011-2022 走看看