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

C#explicti和implicit的含义
◆C# explicti和implicit属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换
◆explicti表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)
◆implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以***多使用implicit运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicti运算符,以便在编译期就能警告客户调用端。
示例:
- 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();
 - }
 - }
 - }