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 }
如此可以看出,隐式转换会方便我们使用,但是有些地方会不方便调试,如果一个类型声明了隐式但是其他未声明,编辑器可能无法检测出来,那么会造成程序运行失败。
时间: 2024-11-12 05:04:10