我们知道,在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为我们又提供了一种“打通”两种类型的方式。


  想要更快更方便的了解相关知识,可以关注微信公众号 


用implicit和explicit打通两种类型_ide