码迷,mamicode.com
首页 > 其他好文 > 详细

C#自定义类型转换

时间:2014-09-16 13:59:10      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   ar   div   sp   log   on   

C#自定义强制转换通过函数中的关键字来声明,且一般都是使用static来表明不依赖于类型实例

示例:

使用explicit来声明显示转换,

 1 class LimitedInt
 2     {
 3         const int MaxValue = 100;
 4         const int MinValue = 0;
 5 
 6         public static explicit operator int(LimitedInt li)
 7         {
 8             return li.TheValue;
 9         }
10 
11         public static explicit operator LimitedInt(int x)
12         {
13             LimitedInt li = new LimitedInt();
14             li.TheValue = x;
15             return li;
16         }
17 
18         private int _TheValue = 0;
19         public int TheValue
20         {
21             get { return _TheValue; }
22             set
23             {
24                 if (value < MinValue)
25                     _TheValue = 0;
26                 else
27                     _TheValue = value > MaxValue
28                         ? MaxValue : value;
29             }
30         }
31     }

此时如果要进行赋值的话应当按照如下规则:

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             LimitedInt li = (LimitedInt)5;
 6             int Five = (int)li;
 7 
 8             Console.WriteLine("li:{0},Five:{1}",li.TheValue,Five);
 9             Console.ReadKey();
10         }
11     }

 

 

按:如果将上述转换explicit换成implicit,就是声明了隐式转换(因为程序会自动判断右值的类型来进行转换),此时调用就可以不使用显示转换(也可以使用):

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             LimitedInt li =5;
 6             int Five = li;
 7 
 8             Console.WriteLine("li:{0},Five:{1}",li.TheValue,Five);
 9             Console.ReadKey();
10         }
11     }

 

如此可以看出,隐式转换会方便我们使用,但是有些地方会不方便调试,如果一个类型声明了隐式但是其他未声明,编辑器可能无法检测出来,那么会造成程序运行失败。

C#自定义类型转换

标签:style   blog   color   使用   ar   div   sp   log   on   

原文地址:http://www.cnblogs.com/lhyz/p/3974676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!