C# explicti和implicit详解

来源:互联网 发布:双轨制直销软件定制 编辑:程序博客网 时间:2024/05/10 08:52

    C#语言有很多值得学习的地方,这里我们主要介绍C# explicti和implicit,包括介绍隐式转换可以让我们的代码看上去更漂亮、更简洁易懂等方面。

    C# explicti和implicit的含义

    ◆C# explicti和implicit属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换

    ◆explicti表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)

    ◆implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)

    隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用implicit运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicti运算符,以便在编译期就能警告客户调用端。

示例:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.    
  5. namespace Example23  
  6. {  
  7. class Program  
  8. {  
  9. //本例灵感来源于大话西游经典台词“神仙?妖怪?”--主要是我实在想不出什么好例子了  
  10. class Immortal  
  11. {  
  12. public string name;  
  13. public Immortal(string Name)  
  14. {  
  15. name = Name;  
  16. }  
  17. public static implicit operator Monster(Immortal value)  
  18. {  
  19. return new Monster(value.name + ":神仙变妖怪?偷偷下凡即可。。。");  
  20. }  
  21. }  
  22. class Monster  
  23. {  
  24. public string name;  
  25. public Monster(string Name)  
  26. {  
  27. name = Name;  
  28. }  
  29. public static explicit operator Immortal(Monster value)  
  30. {  
  31. return new Immortal(value.name + ":妖怪想当神仙?再去修炼五百年!");  
  32. }  
  33. }  
  34. static void Main(string[] args)  
  35. {  
  36. Immortal tmpImmortal = new Immortal("紫霞仙子");  
  37. //隐式转换  
  38. Monster tmpObj1 = tmpImmortal;  
  39. Console.WriteLine(tmpObj1.name);  
  40.    
  41. Monster tmpMonster = new Monster("孙悟空");  
  42. //显式转换  
  43. Immortal tmpObj2 = (Immortal)tmpMonster;  
  44. Console.WriteLine(tmpObj2.name);  
  45.    
  46. Console.ReadLine();  
  47. }  
  48. }  
原创粉丝点击