国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中的DateTime是值類型還是引用類型

2020-01-24 00:41:21
字體:
供稿:網(wǎng)友

近期遇到了DateTime到底是值類型還是引用類型的疑惑,順勢較深入地了解一下DateTime相關(guān)的內(nèi)容

結(jié)論:DateTime是值類型,因?yàn)镈ateTime是結(jié)構(gòu)體,而結(jié)構(gòu)體繼承自System.ValueType,屬于值類型

一、DateTime是值類型還是引用類型的探索

二、了解DateTime結(jié)構(gòu)體

三、DateTime.Now和DateTime.UtcNow是怎么計(jì)算出來的

一、DateTime是值類型還是引用類型的探索

1. 先編寫測試代碼

將dateTime1賦值給dateTime2,然后改變dateTime1的值,如果dateTime2的的值也跟著改變,那么DateTime便是引用類型,看看結(jié)果吧:

dateTime1增加了3天后,dateTime2仍然是2017/4/11,這已經(jīng)能初步說明問題了。

2. 為了進(jìn)一步確定結(jié)論,最可靠的方法是查看變量的地址,值類型的話,dateTime1和dateTime2的地址應(yīng)該不同。

看來確實(shí)是不同的,DateTime是值類型無疑了。

二、了解DateTime結(jié)構(gòu)體

轉(zhuǎn)到DateTime的定義,也可以看到DateTime確實(shí)是struct類型,

看來前面的試驗(yàn)都是無用功了,但DateTime到底是怎樣的結(jié)構(gòu)體呢,主要有如下成員

這些成員里面最關(guān)鍵的是Ticks

Ticks的時(shí)間值以 100 毫微秒為單位,它的64位中,前兩位表示Kind,后面62位表示有多少個(gè)毫微秒。Kind用來指示 DateTime 結(jié)構(gòu)是表示本地時(shí)間、協(xié)調(diào)通用時(shí)間 (UTC) 還是 UTC 和本地時(shí)間都未指定。Kind 字段用于處理本地時(shí)間和 UTC 時(shí)間之間的轉(zhuǎn)換。

DateTime的值范圍在0001/1/1 00:00:00到9999/12/31 23:59:59之間

三、DateTime.Now和DateTime.UtcNow是怎么計(jì)算出來的

反編譯DateTime.Now如下

public static DateTime Now{  [__DynamicallyInvokable]  get  {    DateTime utcNow = DateTime.UtcNow;    bool isAmbiguousDst = false;    long ticks = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utcNow, out isAmbiguousDst).Ticks;    long num = utcNow.Ticks + ticks;    if (num > 3155378975999999999L)    {      return new DateTime(3155378975999999999L, DateTimeKind.Local);    }    if (num < 0L)    {      return new DateTime(0L, DateTimeKind.Local);    }    return new DateTime(num, DateTimeKind.Local, isAmbiguousDst);  }}

太復(fù)雜了啊看不懂,但可以看到大致的意思是先獲取DateTime.UtcNow,然后轉(zhuǎn)換為本地時(shí)間

再反編譯DateTime.UtcNow

public static DateTime UtcNow{  [__DynamicallyInvokable, SecuritySafeCritical]  get  {    long systemTimeAsFileTime = DateTime.GetSystemTimeAsFileTime();    return new DateTime((ulong)(systemTimeAsFileTime + 504911232000000000L | 4611686018427387904L));  }}

最后查閱GetSystemTimeAsFileTime()是Windows的API,作用便是獲取當(dāng)前的UTC時(shí)間

以上所述是小編給大家介紹的C#中的DateTime是值類型還是引用類型,希望對(duì)大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐陵市| 建宁县| 南丰县| 运城市| 古田县| 锡林浩特市| 昌黎县| 革吉县| 竹溪县| 阳高县| 永嘉县| 湛江市| 吉安县| 黄大仙区| 宜都市| 紫阳县| 湖南省| 晋中市| 如东县| 庆城县| 民和| 临江市| 内丘县| 梅州市| 上饶市| 固始县| 南昌市| 温宿县| 济阳县| 宣武区| 绿春县| 资兴市| 高邮市| 察隅县| 昌图县| 广南县| 剑阁县| 项城市| 竹北市| 丽水市| 保山市|