C# implicit隐式转换
今天看书,上面介绍implicit和explicit相对冷门,用的较少。
这个implicit类型虽然冷门,但真的很有用。我在自己的项目里就用了这个
上Demo,
1 public partial class MainWindow : Window 2 { 3 public MainWindow() 4 { 5 InitializeComponent(); 6 this.ManipulationDelta += MainWindow_ManipulationDelta; 7 } 8 private void MainWindow_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) 9 { 10 Vector vectorScale = e.DeltaManipulation.Scale; 11 NoteScale scale = vectorScale; 12 } 13 }
如上图,我需要将Manipulation事件中的Scale缩放变量,转换为一个比较好阅读且有指定意义的类NoteScale。
因为原来的向量Vector,在后续的代码传递中很不好理解。
NoteScale,这个就是自己项目中的业务专业词汇了,具体名称可以根据业务去命名
1 /// <summary> 2 /// 缩放系数 3 /// </summary> 4 class NoteScale 5 { 6 public double X { get; set; } 7 public double Y { get; set; } 8 9 public static implicit operator NoteScale(Vector vector) 10 { 11 return new NoteScale() 12 { 13 X = vector.X, 14 Y = vector.Y, 15 }; 16 } 17 public static implicit operator Vector(NoteScale noteScale) 18 { 19 return new Vector() 20 { 21 X = noteScale.X, 22 Y = noteScale.Y, 23 }; 24 } 25 }
如上图,Vector和NoteScale之间相互转换,是通过implict(隐式转换类型)和operator(用来定义类型转换)俩个关键字实现。
implict的使用场景 ,我的理解是:类型之间转换很频繁、且数据字段比较固定时,可以用上implict,来减少重复工作量、降低写错写漏的风险,后续也不需要关注此类型之间的具体转换逻辑。
而explicit是显示转换类型,Vector和NoteScale之间强制转换,NoteScale scale = (NoteScale)vectorScale;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2018-09-27 WPF StringFormat 格式化文本
2016-09-27 DevExpress Carousel 设置水平滑动列表