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