什么?原来C#还有这两个关键字
系列介绍
简介
【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。
场景
您可以在下班坐地铁的时候,拿出手机逛一逛博客园,利用短短的五分钟完成阅读。
诞生缘由
曾经学过的内容可能过不了多久就忘了,我们需要一些文章来帮我们查漏补缺。
太长篇幅的文章看着滚动条就害怕了,我们可能更期望文字少的文章。
.net体系的内容太多了,平时也不知道该学哪些,我们可能需要一点点知识线索。
文章质量
当然,并不意味着它篇幅短就质量差。所谓麻雀虽小五脏俱全,我们会尽可能保证利用最少的文字去详细的阐述内容。
正文
好吧,直接开们见山来介绍今天的主角:Explicit 和 Implicit。
我记得我第一次见到这两个关键字还是在一次C#基础测试中。当时已经入C#的坑有两年多了吧,自认为基础的题应该不在话下吧。
然后小手一点视频网页上的进行测试按钮,请听题:“请问Explicit的作用是什么?”。我:“%……&……,这他喵的什么东西?是C#的东西?”。
后来在公司问了一些老鸟,好像大家也并不知道这两个关键字,毕竟它和static、operator这些大佬比起来,真的太不显眼了。
它到底是个什么东西
先来直接看一下msdn对它的解释吧:
复制代码
explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符
是的,它就是一个类型转换的语法糖。explicit 与 Implicit的作用其实是一样的,它们之间的区别其实仅仅是显示转换和隐式转换的区别。
来看它的用途
这是我在项目中用到的一处场景,我建立了一个时间段类,里面包含了时间段的开始时间和结束时间。代码大致是酱紫:
复制代码
public class DateTimeRange
{public DateTime StartTime { get; set; }public DateTime EndTime { get; set; }public DateTimeRange(DateTime startTime, DateTime endTime){StartTime = startTime;EndTime = endTime;}
}
在实际的使用场景中,我们项目里往往会去获取这个时间段类的小时数。
复制代码
(timeRange.EndTime - timeRange.StartTime).TotalHours;
是的,一开始我们就是酱紫写的。但是写起来很不爽,每次都要复制N次。然后提取成了一个方法,GetRangeHours()。但是你懂的,一旦程序员懒起来,它会连GetRangeHours都不想写(虽然VS会给你提示,一般只需要按两三次键盘)。所以后来就有了这个版本:
复制代码
public class DateTimeRange
{public DateTime StartTime { get; set; }public DateTime EndTime { get; set; }public DateTimeRange(DateTime startTime, DateTime endTime){StartTime = startTime;EndTime = endTime;}//operator 后面跟需要转换的类型public static implicit operator double(DateTimeRange timeRange){return (timeRange.EndTime - timeRange.StartTime).TotalHours;}
}
然后使用起来就成了这样:
复制代码
double hours = timeRange;
我*,就是这么洒脱。如果不懂这个关键字的同事阅读到这儿,它可能还会很懵逼:“我擦,这个类型明明不是那个类型啊,那个类型又怎么成了这个类型,它们怎么还能等于起来……………………”。此时的你,只能对他微微一笑。
想一想你会在什么场景使用该关键字呢?DTO转换?已有代码不能变更只能扩展?…………
结束
implicit和Explicit都是起到类型转换的作用,它们的区别是转换的时候一个需要显式转换而已,刚才我们那个场景用了隐式转换,如果是显式转换的话就需要 double hours = (DateTimeRange)timeRange; 来写了。
该关键字只能在类内部使用哦,放心,强大的VS会给你提示。
希望本篇文章没有花费您太长的阅读时间。来波关注,咱们下次再见(ง •_•)ง
什么?原来C#还有这两个关键字相关推荐
- Java中的两个关键字——super、this
Java中的两个关键字--super.this 神话丿小王子的博客主页 一.super super 是java中方的一个关键字,用它可以引用父类中的成员: super可用于访问父类中定义的属性 sup ...
- 4、变量和方法被static和final两个关键字修饰,为什么这么做?
常常看到变量和方法被static和final两个关键字修饰,为什么这么做? 这么做有两个目的: 1.变量和方法于类无关,可以直接使用,使用比较方便: 2.强调变量内存地址的不可变性,方法不可继承覆写, ...
- 笛卡尔树 (25 分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字
立志用最少的代码做最高效的表达 笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大.其次所有结点的 ...
- linux用grep查找包含两个关键字的命令
linux用grep查找包含两个关键字的命令 http://zhidao.baidu.com/link?url=VsFxeJXmU7W7hy1UH7eT6QAbUsVz9Ru2ABPuWYHWm4kB ...
- java 截取两个字符之间的字符串_java里面如何截取两个关键字中间的字符串?
展开全部 1.split()+正则表达式来进行截取. 将正则传入62616964757a686964616fe58685e5aeb931333365633839split().返回的是一个字符串数组类 ...
- 在c#中using和new这两个关键字有什么意义
using指令的两个作用: 1.允许在命名空间中使用类型,或者为类型创建别名: using System.Text; 或 using Project = PC.MyCompany.Project; 2 ...
- shell脚本截取两个关键字之间的字符
$ mount | grep /media/xhx /dev/sda1 on /media/xhx/UBUNTU 20_0 type vfat (rw,nosuid,...) /dev/mmcblk0 ...
- grep 显示包含两个关键字_linux三剑客之-grep
一.grep简介 1.介绍 全局查找正则表达式并且打印结果行的命令. 2.输入 一个文件或者一个标准输入(stdin),或者是一个"-"连字符(). 3.输出 打印在屏幕上 4.g ...
- 唉~看看google搜索的两个关键字的结果吧
最新文章
- 从LabVIEW到C++
- C语言重点——指针篇(一篇让你完全搞懂指针)
- 微型计算机外文文献,电子信息科学与技术专业Microcomputer-Systems微型计算机控制系统大学毕业论文外文文献翻译及原文.doc...
- 用java做出32选7_用java做的一个彩票32选7的简单程序
- python中pos()_python中不带NLTK的POS标记器
- python中str和repr_python中str()和repr()函数的区别
- php 实现进制相互转换
- vue实现接受后端传过来的zip数据,axios实现
- 搞工程和搞电子的人摆摊能做什么?
- lambdas for_Java 8发布了! — Lambdas教程
- 针对服务器操作系统安全,浅谈等级保护中的服务器操作系统安全
- python map filter reduce
- Overview of HEVC之5 帧间预测
- Delphi编译后的程序图标无法修改一例
- hdu 1003 Max Sum 简单动态规划
- 叶子结点和分支节点_C++笔试题之求完全二叉树叶子节点数
- 密码破解---实验八:Windows本地破解用户口令
- css td 强制换行,css表格强制换行
- 创业者最爱的美剧《硅谷》大结局竟然是这样!
- 微信提示在客户端提交验证_微信提示非常用设备要求输入短信验证码解决方法...
热门文章
- Java的LockSupport.park()实现分析
- 项目手札2---关于分页显示时地址栏的风格
- Java原来如此-随机数
- dropbox文件_Dropbox即将发布的扩展程序更新将添加更多文件编辑支持,包括Pixlr照片...
- mycat 双主 热切换
- 打造自己博客(wordpress)的wap手机版本
- iOS工程中的info.plist文件的完整研究
- 对象androidandroid 开发中 如何取得ListView 的 每条Item 的对象
- grep和egrep的一些简单用法
- POP3口令扫描案例