用implicit和explicit打通兩種型別
阿新 • • 發佈:2022-02-05
我們知道,在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為我們又提供了一種“打通”兩種型別的方式。
想要更快更方便的瞭解相關知識,可以關注微信公眾號****歡迎關注我的asp.net core系統課程****
《asp.net core精要講解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core專案實戰》 https://ke.qq.com/course/291868
《基於.net core微服務》 https://ke.qq.com/course/299524