operator,implicit(隱式)和explicit (顯示)轉換

c#自定義類型的轉換方式operator,implicit(隱式)和explicit (顯示)聲明

operator 關鍵字來重載內置運算符,或提供類或結構聲明中的用戶定義轉換。它可以定義不同類型之間採用何種轉化方式和轉化的結果。

operator用於定義類型轉化時可採用2種方式,隱式轉換(implicit)和顯示轉換(explicit)

public static implicit 目標類型(被轉化類型 變量參數)
{
return 目標類型結果;
}

public static explicit 目標類型(被轉化類型 變量參數)
{
return 目標類型結果;
}

//顯式轉換
namespace 自定義裝換
{
    class Program
    {
        static void Main(string[] args)
        {
            myclass mc = 1;//通過隱式裝換,生成myclass對象
            Console.WriteLine(mc.Value);
            myclass mc2 = new myclass(2);
            Console.WriteLine((int)mc2);//顯示轉化,調用myclass至int的處理方法
            Console.WriteLine(mc2);//隱式轉化,調用myclass至string的處理方法

        }
    }

    class myclass
    {
        private int value;//聲明value私有字段
        public int Value//聲明只讀屬性
        {
            get { return value; }
        }
        public myclass(int value)//構造函數
        {
            this.value = value;
        }

        public static explicit operator int(myclass mc)//顯示聲明的myclass轉int類處理方法
        {
            return mc.value;
        }
        public static implicit operator myclass(int value)//隱式聲明的int轉myclass類處理方法
        {
            return new myclass(value);
        }
        public static implicit operator string(myclass mc)//隱式聲明的myclass轉string類處理方法
        {
            return ("定義的myclass類string類型轉化結果");
        }
    }

 }
//隱式轉換
namespace 自定義裝換
{
    class Program
    {
        static void Main(string[] args)
        {

            myclass mc2 = new myclass(2);

            Console.WriteLine(mc2);//出錯位置,編譯器無法選擇有效的類型轉化方式

        }
    }

    class myclass
    {
        private int value;
        public int Value
        {
            get { return value; }
        }
        public myclass(int value)
        {
            this.value = value;
        }      
        public static implicit operator myclass(int value)
        {
            return new myclass(value);
        }

        ///2個隱式聲明myclass類轉化類型的方法
        public static implicit operator int(myclass mc)
        {
            return mc.value;
        }
        public static implicit operator string(myclass mc)
        {
            return ("定義的myclass類string類型轉化結果");
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章