C# explicti和implicit詳解
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();
- }
- }
- }
【編輯推薦】