程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#基礎概念二十五問(18)

C#基礎概念二十五問(18)

編輯:關於C語言

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();
    }
  }
}

結果:

紫霞仙子:神仙變妖怪?偷偷下凡即可。。。

孫悟空:妖怪想當神仙?再去修煉五百年!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved