23.explicit 和 implicit 的含義?
答:
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();
}
}
}
結果:
紫霞仙子:神仙變妖怪?偷偷下凡即可。。。
孫悟空:妖怪想當神仙?再去修煉五百年!