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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值