【Unity】Unity C#基础(十五)implicit 隐式类型转换、explicit 显式类型转换
文章目录
- implicit 隐式类型转换
- Explicit 显式类型转换
- 总结
implicit 隐式类型转换
implicit关键字用于声明隐式的用户自定义的类型转换运算符。 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。
使用隐式转换操作符之后,在编译时会跳过异常检查,所以隐式转换运算符应当从不引发异常并且从不丢失信息,否则在运行时会出现一些意想不到的问题。
例如当前PaymentDTO和Payment的定义如下
public class Payment
{public decimal Amount { get; set; }
}public class PaymentDTO
{public string AmountString { get; set; }
}
如果需要将Payment隐式转换成PaymentDTO, 仅需声明PaymentDTO的隐式转换运算符
public class PaymentDTO
{public string AmountString { get; set; }public static implicit operator PaymentDTO(Payment payment){return new PaymentDTO{AmountString = payment.Amount.ToString("C2")};}
}
调用时只需要直接赋值就可以
class Program
{static void Main(string[] args){PaymentDTO dto = new Payment { Amount = 1 };Console.WriteLine(dto.AmountString);Console.Read();}
}
Explicit 显式类型转换
Explicit关键字声明必须通过转换来调用的用户定义的类型转换运算符。不同于隐式转换,显式转换运算符必须通过转换的方式来调用,如果缺少了显式的转换,在编译时就会产生错误。
例如现在我们将前面PaymentDTO类中定义的转换操作符从Implicit变为Explicit
public class PaymentDTO
{public string AmountString { get; set; }public static explicit operator PaymentDTO(Payment payment){return new PaymentDTO{AmountString = payment.Amount.ToString("C2")};}}
这时候由于Main方法中没有显式转换,所以编译器出错,提示Cannot implicitly convert type ‘ExplicitImplicit.Payment’ to ‘ExplicitImplicit.PaymentDTO’. An explicit conversion exists (are you missing a cast?
如果想要编译器通过编译, 只需要做一个显示转换即可
class Program
{static void Main(string[] args){PaymentDTO dto = (PaymentDTO)new Payment { Amount = 1 };Console.WriteLine(dto.AmountString);Console.Read();}
}
总结
- Implicit提高了代码的可读性,但程序员需要自己保证转换不引发异常且不丢失信息。
- Explicit可阻止编译器静默调用可能产生意外后果的转换操作。
- 前者更易于使用,后者能向阅读代码的每个人清楚地指示您要转换类型。
本文转载自:C#中的Explicit和Implicit,感谢分享。
更多内容请查看总目录【Unity】Unity学习笔记目录整理
【Unity】Unity C#基础(十五)implicit 隐式类型转换、explicit 显式类型转换相关推荐
- Python基础十五:面向对象编程四:高级特性
Python基础十五:面向对象编程四:高级特性 Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程 Author:yooongchun Em ...
- 五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解
壹 ❀ 引 可以说this与闭包.原型链一样,属于JavaScript开发中老生常谈的问题了,但开发好几年,依然被几道this指向题安排明明白白的人应该不在少数.对于初学者而言,this概念抽象,变化 ...
- Python网络爬虫Selenium页面等待:强制等待、隐式等待和显式等待
关于Python网络爬虫Selenium强制等待.隐式等待和显式等待的总结 from selenium import webdriver import time from selenium.webdr ...
- js 中的this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解
壹 ❀ 引 工具猴-免费在线工具-在线工具箱- 可以说this与闭包.原型链一样,属于JavaScript开发中老生常谈的问题了,百度一搜,this相关的文章铺天盖地.可开发好几年,被几道this题安 ...
- Selenium4+Python3系列 - Selenium的三种等待,强制等待、隐式等待、显式等待
为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...
- Oracle隐式游标和显式游标
游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的e ...
- intent隐式和显式_Neo4j:使隐式关系成为显式和双向关系
intent隐式和显式 我最近阅读了Michal Bachman关于 Neo4j中双向关系的文章 ,他建议对于某些关系类型,我们对关系的方向不那么感兴趣,因此可以在查询时忽略它. 他使用以下示例显示N ...
- Neo4j:使隐式关系成为显式和双向关系
最近,我阅读了Michal Bachman关于 Neo4j中双向关系的文章 ,他建议对于某些关系类型,我们对关系的方向不那么感兴趣,因此可以在查询时忽略它. 他使用以下示例显示了Neo Technol ...
- oracle 游标内存自动释放,详解Oracle隐式游标和显式游标
游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的e ...
最新文章
- c++作业5 9.22
- MAC电脑数据迁移方法
- Javascript模块化编程require.js的用法
- java递归算法实现
- 多项式相乘与相加演示
- 线程池的种类,区别和使用场景
- OpenGL中shader使用
- WordPress多用途电子商务博客新闻主题betheme 21.5.6版本
- UI设计实用临摹素材|APP设计的信息可视化!
- 树莓派命令行连接蓝牙音箱及不出声问题
- 财务人毕业三年薪资翻了三倍,学会数据分析竟然这么吃香
- jquery mysql jsp搜索功能_jquery实现的一个提前搜索功能
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
- 关于@Autowired的使用:推荐使用构造函数进行注入
- 订单生产计划表范本_生产计划表(生产计划表格模板)
- 360浏览器的html在哪里,360浏览器收藏夹路径在哪里
- 服务器安装固态硬盘的步骤,电脑安装固态硬盘及安装系统的详细教程
- 一个优秀程序员可抵五个普通程序员!
- 1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。 这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?2.角谷定理。
- Vue中引用图片动态背景图片
热门文章
- 蚂蚁课堂 - springboot入门(非常详细)讲解人:(余胜军)
- SecureCRT的命令行参数都有哪些
- jQuery弹出插件thickbox使用心得
- Differences between Theorem, Lemma and Corollary, etc.
- Android画不规则形状
- Mac宝藏软件推荐(笔者也在用)(二)
- 什么是Resnet50模型?
- Linux攻关之基础模块四 命令初识
- window系统node彻底卸载
- mac pdf去水印_PDF水印工具for Mac-PDF水印工具Mac版下载 V1.7-PC6苹果网