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;

posted @   唐宋元明清2188  阅读(249)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
历史上的今天:
2018-09-27 WPF StringFormat 格式化文本
2016-09-27 DevExpress Carousel 设置水平滑动列表
点击右上角即可分享
微信分享提示
剑桥
16:15发布
剑桥
16:15发布
7°
西南风
3级
空气质量
相对湿度
66%
今天
2°/10°
周三
2°/8°
周四
中雨
2°/7°