zoukankan      html  css  js  c++  java
  • C#自定义类型转换操作符

    C#类型转换操作符

    C#中两个没有父子关系的类型怎么互相转换呢?

    implicit和explicit是一对转换操作符,这对操作符怎么用呢?请看以下例子:

    创建一个猴子类

    class Monkey
    {
      public int Age;
    }
    

    创建一个石头类

    class Stone
    {
     public int Age;
    }

    石头怎么转换为猴子呢?

    实现隐式转换的方法,是在石头类中写一个Implicit类型的Monkey方法,传入参数石头

    class Stone
    {
     public int Age;
    
     public static Implicit operator Monkey(Stone stone)
     {
       Monkey monkey = new Monkey();
       monkey.Age = stone.Age / 500;
       return monkey;
      }
    }
    

    实现显示转换的方法,是在石头类中写一个explicit类型的Monkey方法,传入参数石头

    class Stone
    {
     public int Age;
    
     public static explicit operator Monkey(Stone stone)
     {
       Monkey monkey = new Monkey();
       monkey.Age = stone.Age / 500;
       return monkey;
      }
    }

    隐式转换

    Stone stone = new Stone();
    stone.Age = 5000;
    Monkey wukongSun = stone;
    Console.WriteLine(wukongSun.Age);
    

    显式转换

    Stone stone = new Stone();
    stone.Age = 5000;
    Monkey wukongSun = (Monkey)stone;
    Console.WriteLine(wukongSun.Age);
    

      

    这样就实现了把石头转换为猴子。

    Implicit关键字用于声明隐式的用户定义类型转换运算符。它可以实现2个不同类的隐式转换 ,提高代码的可读性。但是需要注意使用隐式转换操作符之后,在编译时会跳过异常检查,所以隐式转换运算符应当从不引发异常并且从不丢失信息,否则在运行时会出现一些意想不到的问题。

    Explicit关键字声明必须通过转换来调用的用户定义的类型转换运算符。不同于隐式转换,显式转换运算符必须通过转换的方式来调用,如果缺少了显式的转换,在编译时就会产生错误。

  • 相关阅读:
    java空指针异常
    iOS 中strong,weak,copy,assign区别
    VisualSVN修改默认端口 443、8443 的 方法
    SVNServer 执行上下文错误: 远程主机强迫关闭了一个现有的连接。
    阿里云打开端口(涉及端口)的操作
    使用VisualSVN Server搭建SVN服务器(测试通过)
    SQL server触发器中 update insert delete 分别给写个例子被
    SQL中字符串截取函数(SUBSTRING)
    精选 SQL 脚本
    树形结构有关的SQL
  • 原文地址:https://www.cnblogs.com/yt954437595/p/15106495.html
Copyright © 2011-2022 走看看