首页 > 代码库 > 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#自定义类型转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。