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;
C# implicit隐式转换的更多相关文章
- Scala中的Implicit(隐式转换,隐式参数,隐式类)
文章来自:http://www.cnblogs.com/hark0623/p/4196452.html 转发请注明 代码如下: /** * 隐式转换 隐式参数 隐式类 */ //隐式转换 class ...
- 【Scala】什么是隐式转换?它又能用来干嘛?该怎么用
文章目录 定义 隐式参数 隐式转换 隐式值:给方法提供参数 隐式视图 将Int和Double类型转换为String 狗狗学技能(使用别的类中的方法) 使用规则 定义 隐式参数 隐式参数指在函数或者方法 ...
- C#中的类型转换-自定义隐式转换和显式转换
目录 前言 基础知识 示例代码 实际应用 问题 答案 报错 用户定义的转换必须是转换成封闭类型,或者从封闭类型转换 参考 其他 应用和设计 读音 参考 前言 有时我们会遇到这么一种情况:在json数据 ...
- 显示转换explicit和隐式转换implicit
用户自定义的显示转换和隐式转换 显式转换implicit关键字告诉编译器,在源代码中不必做显示的转型就可以产生调用转换操作符方法的代码. 隐式转换implicit关键字告诉编译器只有当源代码中指定了显 ...
- Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution
在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typ ...
- C# 隐式转换关键字 implicit
implicit 关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 引用摘自:implicit(C# 参考 ...
- Scala之隐式转换implicit详解
假设我们有一个表示文本的行数的类LineNumber: class LineNumber ( val num : Int ) 我们可以用这个类来表示一本书中每一页的行数: val lineNumOfP ...
- c++隐式转换(implicit conversion)
1.缘由 最近在使用nlohmann的json,发现有些地方不是特别好用,所以就想自己修改一下(目的是为了增加类似jsoncpp中可以//增加注释的功能),在看源码的时候看到了一个迷惑的地方,就是解析 ...
- SQL Server中提前找到隐式转换提升性能的办法
http://www.cnblogs.com/shanksgao/p/4254942.html 高兄这篇文章很好的谈论了由于数据隐式转换造成执行计划不准确,从而造成了死锁.那如果在事情出现之前 ...
随机推荐
- 在DeepIn系统中使用eclipse创建maven的Web项目
1. 安装好jdk和eclipse以后,启动eclipse 2. 创建maven项目,选择Maven Project 3. 在创建项目过程中,创建简单Maven项目,不使用archetype创建(会联 ...
- 5.3dmax轴相关
# 知识点: 转换为可编辑的样条线(spline) chamfer 切角 Fillet 圆角 车削命令 书柜案例2 样条线(从图形到多边形) 1.在平面视图中选择矩形并创建一个矩形,将矩形转化为可编辑 ...
- Linux查看CPU 内存命令
查看CPU 内存命令:https://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html 查看某一进程内存占用:ps -ef 获取PID ...
- 116、商城业务---分布式事务---seata的AT模式存在的问题&&最终一致性库存解锁逻辑
seata的AT模式不适合高并发的项目,因为它需要加锁来保证回滚.因此我们的订单服务方法中就尽量不能使用@GlobalTransactional来管理分布式事务. 因此在订单服务中,我们使用下面这种方 ...
- 关于tomcat部署web服务方式
方式1.apache-tomcat-8.0.47\webapps文件夹下放war包会自动解压.文件夹名称就是访问路径 方式2.apache-tomcat-8.0.47\conf\Catalina\lo ...
- k8s探针
探针是由kubelet对容器执行的定期诊断.要执行诊断,kubelet调用由容器实现的Handler.有三类处理程序: ExecAction:在容器内执行指定命令.如果命令退出时返回码为0认为诊断成功 ...
- Windows系统镜像下载站合集
Windows系统镜像下载站合集https://latest10.win/https://msdn.itellyou.cn/https://hellowindows.cn/https://www.im ...
- 利用MRT批量处理MOD13Q1原始数据拼接的方法
一.在存放原始数据的文件夹里,新建立一个result文件夹.新拼接的文件夹处理过后会在这个文件夹里出现 二.利用MRT点点点保存一个prm文件在存放原始数据的文件夹里 具体操作步骤参考 青灯常伴古佛 ...
- 深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析
深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析 在本篇文章当中主要给大家介绍在 cpython 虚拟机当中是如何实现 复数 complex 这个数据类型的,这个数据类型在 ...
- C#/VB.NET:如何将PDF转为PDF/A
PDF/A是一种ISO标准的PDF文件格式版本,是为长期保存文件而设计的.它提供了一种工具,使电子文件在长时间之后依然以一种保留其外观的方式重现,而不管该文件是用什么工具和系统创建.储存或制作的.这种 ...