C#用戶定義類型轉換


C#用戶定義類型轉換

  • 用於自定義類和結構能夠進行隱式轉換和顯示轉換.例如:將一個自定義類類型轉換成整型,浮點型等,反之亦然.

C#提供隱式轉換和顯式轉換

  • 隱式轉換:編譯器自動執行轉換
  • 顯式轉換:編譯器只在使用顯式轉換運算符時才執行轉換

聲明隱式轉換的語法如下.注:所有用戶定義轉換必須使用public和static修飾符

public  static  implicit  operator TargetType(SourceType Identifier)
{
       ...
       return ObjectOfTargetType;
}

TargetType:目標類型

參數Identitfier:源數據

 

例如,下面代碼使一個int字面量被隱式轉換為LimitedInt對象,反過來LimitedInt也可以隱式轉換成一個int

    class LimitedInt
    {
         const  int MaxValue =  100;
         const  int MinValue =  0;

         private  int _theValue =  0;
         // 屬性
         public  int TheValue
        {
             get {  return _theValue; }
             set
            {
                 if (value < MinValue)
                {
                    _theValue =  0;
                }
                 else
                {
                    _theValue = value > MaxValue ? MaxValue : value;
                }
            }
        }

         // 隱式轉換:將LimitedInt對象轉為整型
         public  static  implicit  operator  int(LimitedInt li)
        {
             return li.TheValue;
        }

         // 隱式轉換:將整型轉換為LimitedInt對象
         public  static  implicit  operator LimitedInt( int x)
        {
            LimitedInt li =  new LimitedInt();
            li.TheValue = x;
             return li;
        }

    }

     class Program
    {
         static  void Main( string[] args)
        {
            LimitedInt li =  500// 將500轉換為LimitedInt

             int value = li;   // 將LimitedInt轉換為int

            Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value);

            Console.ReadKey();
        }

改代碼輸出結果:li:100,value:100

 

顯示轉換和強制轉換運算符

前面所講的都是隱式轉換,如果你把運算符implcit改為explicit,你將不得不在實行轉換時顯示使用轉換運算符

代碼片段如下:

        //顯示 轉換:將LimitedInt對象轉為整型
         public  static  explicit  operator  int(LimitedInt li)
        {
             return li.TheValue;
        }

         //顯示 轉換:將整型轉換為LimitedInt對象
         public  static  explicit  operator LimitedInt( int x)
        {
            LimitedInt li =  new LimitedInt();
            li.TheValue = x;
             return li;
        }

        static  void Main( string[] args)
        {
            LimitedInt li = (LimitedInt) 500// 將500強制轉換為LimitedInt

             int value = ( int)li;   // 將LimitedInt強制轉換為int

            Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value);

            Console.ReadKey();
        }

 

 


免責聲明!

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



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