首页 > 代码库 > C#自定义类型转换

C#自定义类型转换

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

示例:

使用explicit来声明显示转换,

 1 class LimitedInt 2     { 3         const int MaxValue = http://www.mamicode.com/100; 4         const int MinValue = http://www.mamicode.com/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 =http://www.mamicode.com/ x;15             return li;16         }17 18         private int _TheValue = http://www.mamicode.com/0;19         public int TheValue20         {21             get { return _TheValue; }22             set23             {24                 if (value < MinValue)25                     _TheValue = http://www.mamicode.com/0;26                 else27                     _TheValue = http://www.mamicode.com/value > MaxValue28                         ? 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#自定义类型转换