C# explicti和implicit详解

开发 后端
这里介绍C# explicti和implicit,对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicti运算符,以便在编译期就能警告客户调用端。

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. }  

【编辑推荐】

  1. C#静态变量简单分析
  2. C# sealed修饰符学习笔记
  3. C# const和static readonly区别浅谈
  4. C#隐含类型局部变量浅析
  5. C#对象初始化器描述
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-21 16:05:04

C#使用ref和out

2009-09-24 15:20:54

C#接口定义

2009-08-06 15:40:11

C#装箱和拆箱

2024-09-23 16:55:18

C#代码开发

2009-08-14 17:09:48

C#引用类型

2009-09-07 16:13:56

C# MessageB

2009-07-30 18:20:21

C#继承

2009-08-24 11:23:41

C# TimeLabe

2009-09-01 16:07:04

C#命名规约

2009-08-27 16:11:03

C# delegateC# event

2009-08-13 17:04:09

C#语言C#程序

2010-09-14 14:05:42

C#委托

2021-02-09 09:53:11

C#多线程异步

2009-08-25 17:13:57

C#串口编程

2009-08-06 17:31:46

C#制作屏幕保护

2024-03-04 18:49:59

反射C#开发

2009-08-03 13:13:52

C#调用Outlook

2009-09-02 13:15:23

C#数组复制

2009-09-02 09:24:03

C# this关键字

2009-09-02 17:12:06

C#关机代码
点赞
收藏

51CTO技术栈公众号