explicit和implicit的含义

2023-07-06   


explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换
   explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)
   implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)
   隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端
   示例:
   using System;
   using System.Collections.Generic;
   using System.Text;
   namespace Example23
  
   class Program
  
   //本例灵感来源于大话西游经典台词“神仙?妖怪?”–主要是我实在想不出什么好例子了
   class Immortal
  
   public string name;
   public Immortal(string Name)
  
   name = Name;
  
   public static implicit operator Monster(Immortal value)
  
   return new Monster(value.name + “:神仙变妖怪?偷偷下凡即可。。。”);
  
  
   class Monster
  
   public string name;
   public Monster(string Name)
  
   name = Name;
  
   public static explicit operator Immortal(Monster value)
  
   return new Immortal(value.name + “:妖怪想当神仙?再去修炼五百年!”);
  
  
   static void Main(string[] args)
  
   Immortal tmpImmortal = new Immortal(“紫霞仙子”);
   //隐式转换
   Monster tmpObj1 = tmpImmortal;
   Console.WriteLine(tmpObj1.name);
   Monster tmpMonster = new Monster(“孙悟空”);
   //显式转换
   Immortal tmpObj2 = (Immortal)tmpMonster;
   Console.WriteLine(tmpObj2.name);
   Console.ReadLine();
  
  
  
   结果:
   紫霞仙子:神仙变妖怪?偷偷下凡即可。。。
   孙悟空:妖怪想当神仙?再去修炼五百年!


相关内容:

  1. 有含义的网名500个
  2. 党性修养的含义及主要内容
  3. 解释DataSet(ds) 和 ds as DataSet 的含义
  4. HSRP的含义以及如何工作
  5. JDO的含义
  6. CLR与IL分别是什么含义