什么?原来C#还有这两个关键字

系列介绍

简介

【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。

场景

您可以在下班坐地铁的时候,拿出手机逛一逛博客园,利用短短的五分钟完成阅读。

诞生缘由

  • 曾经学过的内容可能过不了多久就忘了,我们需要一些文章来帮我们查漏补缺。

  • 太长篇幅的文章看着滚动条就害怕了,我们可能更期望文字少的文章。

  • .net体系的内容太多了,平时也不知道该学哪些,我们可能需要一点点知识线索。

文章质量

当然,并不意味着它篇幅短就质量差。所谓麻雀虽小五脏俱全,我们会尽可能保证利用最少的文字去详细的阐述内容。

正文

好吧,直接开们见山来介绍今天的主角:Explicit 和 Implicit

我记得我第一次见到这两个关键字还是在一次C#基础测试中。当时已经入C#的坑有两年多了吧,自认为基础的题应该不在话下吧。

然后小手一点视频网页上的进行测试按钮,请听题:“请问Explicit的作用是什么?”。我:“%……&……,这他喵的什么东西?是C#的东西?”。

后来在公司问了一些老鸟,好像大家也并不知道这两个关键字,毕竟它和staticoperator这些大佬比起来,真的太不显眼了。

它到底是个什么东西

先来直接看一下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转换?已有代码不能变更只能扩展?…………

结束

implicitExplicit都是起到类型转换的作用,它们的区别是转换的时候一个需要显式转换而已,刚才我们那个场景用了隐式转换,如果是显式转换的话就需要 double hours = (DateTimeRange)timeRange; 来写了。

该关键字只能在类内部使用哦,放心,强大的VS会给你提示。

希望本篇文章没有花费您太长的阅读时间。来波关注,咱们下次再见(ง •_•)ง

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php files得不到导入的文件,PHP判断文件是否被引入的方法get_included_files用法示例...

本文实例讲述了PHP判断文件是否被引入的方法get_included_files用法。分享给大家供大家参考,具体如下:// 本文件是 abc.phpinclude test1.php;include_once test2.php;require test3.php;require_once test4.php;$included_files get_included_files();…

蓝桥杯2015初赛-三羊献瑞-枚举

题目描述 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。 输出 请你填写“三羊献瑞”所代表…

linux系统中变量,Linux系统中的环境变量知识详解

对于没有使用过linux系统的用户来说,有很多术语和功能都很陌生。本文就介绍了linux系统中的环境变量的相关知识,具体内容如下所述。linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相…

如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore。第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输出(本篇文章)第2部分-使用Serilog记录所选的端点名称[敬请期待]第3部分-使用Serilog.AspNetCore记录MVC…

蓝桥杯2015初赛-加法变乘法-枚举

题目描述 我们都知道:123 … 49 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 123…101112…272829…49 2015 就是符合要求的答案。 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提…

linux 如何赋值目录,Linux文件系统之目录的建立

一:前言在用户空间中,建立目录所用的API为mkdir().它在内核中的系统调用入口是sys_mkdir().今天跟踪一下函数来分析linux文件系统中目录的建立过程.二:sys_mkdir()Sys_mkdir()对应的代码如下:asmlinkage long sys_mkdir(const cha…

net下的高性能轻量化半自动orm+linq的《SqlBatis》

一、项目介绍该项目内置单表linq操作,xml动态sql解析,词法分析,类型映射等功能。SqlMapper,用来处理sql与数据库操作,它设计的目标是支持mysql,sqlserver,sqllite,pgsql等.TypeMapper用于完成将数据库的字段类型映射到C#类型&…

蓝桥杯2017初赛-迷宫-dfs

题目描述 X星球的一处迷宫游乐场建在某个小山坡上。它是由10x10相互连通的小房间组成的。 房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间,R表示走到右边的房间,U表示走到上坡方向的…

ubuntu系统虚拟机linux系统,基于虚拟机的Linux操作系统安装(Ubuntu

《基于虚拟机的Linux操作系统安装(Ubuntu》由会员分享,可在线阅读,更多相关《基于虚拟机的Linux操作系统安装(Ubuntu(13页珍藏版)》请在人人文库网上搜索。1、实验报告1课程名称: Linux程序设计 实验名称:基于虚拟机的Linux操作系…

如何快速融入团队(六)

作者:邹溪源,长沙资深互联网从业者,架构师社区特邀嘉宾!一我总是在记忆深处探访那些拥有高效率团队的一切特征,并试图从纷繁复杂的记忆尘埃中找出一些共性,庆幸我已经习惯于通过阅读和思考来解读这些内容&a…

Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例

一、简单版参考stackoverflow的例子,改了一个出来:while IFS read var valdoif [[ $var \[*] ]]thensection$(echo $var | sed s/^\[\(.*\)\]$/\1/)elif [[ $val ]]thenif [ -z $section ];thendeclare "${var}$val"elsedeclare "${sec…

蓝桥杯2017初赛-油漆面积-枚举

题目描述 X星球的一批考古机器人正在一片废墟上考古。该区域的地面坚硬如石、平整如镜。 管理人员为方便,建立了标准的直角坐标系。 经过各种测量,每个机器人都会报告一个或多个矩形区域,作为优先考古的区域。 矩形的表示格式为(x1,y1,x2,y2…

临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障

临近年关,咨询师提出360、搜狗急速浏览器无法单点登录到公司核心产品WD: 重定向过多。现象经过测试, 出现单点登陆故障的是搜狗、360等双核浏览器(默认使用Chrome内核), 较新式的Edge、Chrome、Firefox均未出现此障碍。Developer tool监测不到…

Asp.Net Core 已支持 gRPC-Web !!

grpc-dotnet 项目在 PR #695 完成了 ASP.NET Core 服务与 .NET Core gRPC 客户端的 gRPC-Web 实现。虽然目前还是实验性项目,但是并不阻碍我们为之兴奋。下面我们来看看如何使用。gRPC-Web 简介gRPC-Web 允许从浏览器应用程序使用 gRPC,gRPC-Web 支持在新…

蓝桥杯2017初赛-打印大X-找规律

题目描述 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格,所有的空白位置都以句点符来代替。 要求输入两个整数m n,表示笔的宽度,X的高度。 输入 输入存在多组数据 …

排查生产问题linux命令,排查问题所用到的一些Linux命令实践(不定期更新。。)...

一、前言线上问题排查可能是每个程序员都会经历的。在排查的过程中,往往会用到很多Linux命令,也会产生一些很实用的技巧。本博文通过分析一次线上问题排查的过程,把所有用到的命令串起来。每个Linux命令的参数往往会很多,下面对Li…

蓝桥杯2015决赛-方格填数-枚举 or dfs

题目描述 在2行5列的格子中填入1到10的数字。 要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。 如下图所示的2种,就是合格的填法。 请你计算一共有多少种可能的方案。 输出 请输出该整数,不要输出任何多…

【实战 Ids4】║ 在Swagger中调试认证授权中心

回家的路上照顾好自己哟~大家好,老张已经顺利到家啦,闲的无事写两篇文章冒个泡吧,其实写的内容都是群友提出来的问题,简单的我会在群里直接提供思路,麻烦的我就写个文章说明一下吧,也是自己的一个记录作用&…

linux 集群 java,Linux Tomcat 集群 利用记实1--搭建javaWeb运行情况

前段时候一向在搞linux,有很多多少工具只曩昔没有做过。影象不是那么深刻,此刻把历程记实下来,以备今后盘问。一:起首说一下我们的计划, 一共有六台办事器,此中两台安置Oracle 10g做数据库集群(这个不在这篇…

蓝桥杯2016初赛-网友年龄-枚举

题目描述 某君新认识一网友。 当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 输出…