用implicit和explicit打通两种类型
我们知道,在c#中,如果两个类型没有继承关系 ,是不能相互值赋的,但有两个关键字implicit和explicit,可以让 Date date = DateTime.Now这样的赋值成为可能。
注:c#是没有Date类型的,但DateTime有Date属性 DateTime.Date,但这个属性本质上是个DateTime类型,只不过时间是00:00:00
using System;
using static System.Console;
namespace KeyWordsDemo
{
class ImplicitAndExplicitDemo : IDemo
{
public void Run()
{
//把DateTime赋值 给Date
Date date = DateTime.Parse("2030-01-01 12:12:12");
WriteLine($"Date:{date}");
WriteLine($"Year:{date.Year}");
WriteLine($"Month:{date.Month}");
WriteLine($"Day:{date.Day}");
//把Date转成DateTime类型
var datetime = (DateTime)date;
WriteLine($"DateTime:{datetime}");
}
public struct Date
{
private DateTime _value;
public int Year
{
get
{
return _value.Year;
}
}
public int Month
{
get
{
return _value.Month;
}
}
public int Day
{
get
{
return _value.Day;
}
}
public static implicit operator Date(DateTime dateTime)
{
var date = new Date();
date._value = dateTime;
return date;
}
public static explicit operator DateTime(Date date)
{
return date._value.Date;
}
public override string ToString()
{
return _value.ToString("yyyy/MM/dd");
}
}
}
}
这里的Date只是简单封装,可根据自己的需求进行精确处理。
Date date = DateTime.Parse("2030-01-01 12:12:12");会调用public static implicit operator Date(DateTime dateTime)方法。
var datetime = (DateTime)date;会调用public static explicit operator DateTime(Date date)方法。
implicit和explicit为我们又提供了一种“打通”两种类型的方式。
想要更快更方便的了解相关知识,可以关注微信公众号

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言