C# implicit隐式转换

2023-06-12,,

今天看书,上面介绍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;

C# implicit隐式转换的相关教程结束。

《C# implicit隐式转换.doc》

下载本文的Word格式文档,以方便收藏与打印。