C#練習筆記1:自定義的類型轉換和操作符的重載


  本次主要學習了一下C#中自定義類型的轉換,一些轉換c#默認是不能夠轉換的,所以這個時候就需要用戶自己來定義需要轉換的方式,也就是自定義的類型轉換方式,用戶自定義類型轉換這里實現了兩種,一種是顯式的轉換,一種是隱式的轉換,再就是操作符的重載了。

  涉及到的關鍵字主要有:implicit(隱式),explicit(顯式),operator(操作符),在代碼中我們還要注意另一些關鍵字,如static哪里

  下面是代碼部分:

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OperatorClass
{
    class Program
    {
        static void Main(string[] args)
        {


            Console.WriteLine("隱式轉換:");
            int testInt;

            //隱式轉換
            TransformTypeInt test = new TransformTypeInt();
            //1.
            test = -200;
            Console.WriteLine(test.SourceInt);
            //2.
            test = 300;
            testInt = test;
            Console.WriteLine(testInt);
            Console.WriteLine();


            Console.WriteLine("顯式轉換:");
            //顯式轉換
            string testStr;

            ExplicitTrans str = new ExplicitTrans();
            //str = "HelloWorld";

            str = (ExplicitTrans)"HelloWorld";
            Console.WriteLine(str.SourceStr);

            testStr =(string)str;
            Console.WriteLine(testStr);
            Console.WriteLine();


            Console.WriteLine("操作符重寫:");
            TransformTypeInt var1 = new TransformTypeInt();
            TransformTypeInt var2 = new TransformTypeInt();
            TransformTypeInt var = new TransformTypeInt();
            var1 = 63;
            var2 = 78;
            var = var1 + var2;
            Console.WriteLine(var.SourceInt);
            Console.ReadKey();


        }
    }

    /// <summary>
    /// 隱式轉換類
    /// </summary>
    //從一種類型轉換到另一種類型
    class TransformTypeInt
    {
        private int sourceInt=0;

        public int SourceInt
        {
            get
            {
                //返回一個大於零的數
                return sourceInt > 0 ? sourceInt :0;
            }
            set { sourceInt = value; }
        }

        /// <summary>
        /// 隱式的轉換
        /// </summary>
        /// <param name="source"></param>
        //隱式轉換,將TransformTypeInt轉為int
        public static implicit operator int(TransformTypeInt source)
        {
            return source.SourceInt;
        }
        //隱式轉換,將int轉換為TransformTypeInt;
        public static implicit operator TransformTypeInt(int source)
        {
            TransformTypeInt tar = new TransformTypeInt();
            tar.SourceInt = source;
            return tar;
        }

        /// <summary>
        /// 重寫+操作符,實現兩個值追加,注意這里的static,public operator
        /// </summary>
        /// <param name="var1"></param>
        /// <param name="var2"></param>
        /// <returns></returns>
        public static TransformTypeInt operator +(TransformTypeInt var1,TransformTypeInt var2)
        {
            TransformTypeInt tar = new TransformTypeInt();
            string a = var1.SourceInt.ToString() + var2.SourceInt.ToString();
            tar.SourceInt = Convert.ToInt32(a);
            return tar;
        }
    }

    /// <summary>
    /// 顯式轉換
    /// </summary>
    class ExplicitTrans
    {
        string sourceStr;

        public string SourceStr
        {
            set { sourceStr = value; }
            get { return sourceStr; }
        }

        public static explicit operator string(ExplicitTrans source)
        {
            return source.SourceStr;
        }

        public static explicit operator ExplicitTrans(string source)
        {
            ExplicitTrans tar = new ExplicitTrans();
            tar.SourceStr = source;
            return tar;
        }

    }
}

   程序的執行結果附上一張經典的控制台截圖(^-^)V

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM