LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#中两个关键字 Explicit 和 Implicit,你知道吗?

admin
2024年10月10日 11:12 本文热度 371
转自:句幽
cnblogs.com/uoyo/p/12157709.html

简介

五分钟的.NET是一个利用您的碎片化时间来学习和丰富.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 = (double)timeRange; 来写了。

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

-EOF -


该文章在 2024/10/10 17:54:12 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved