最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年04月23日 10:19:17   作者:zhixin9001  
近期遇到了DateTime到底是值類型還是引用類型的疑惑,順勢較深入地了解一下DateTime相關(guān)的內(nèi)容,大家有需要的朋友可以參考下

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

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

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

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

三、DateTime.Now和DateTime.UtcNow是怎么計算出來的

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

1. 先編寫測試代碼

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

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

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

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

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

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

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

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

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

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

三、DateTime.Now和DateTime.UtcNow是怎么計算出來的

反編譯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)換為本地時間

再反編譯DateTime.UtcNow

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

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

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

相關(guān)文章

  • C#獲取網(wǎng)頁源代碼的方法

    C#獲取網(wǎng)頁源代碼的方法

    這篇文章主要介紹了C#獲取網(wǎng)頁源代碼的方法,涉及C#基于自定義函數(shù)讀取網(wǎng)頁html代碼的方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#實現(xiàn)對二維數(shù)組排序的方法

    C#實現(xiàn)對二維數(shù)組排序的方法

    這篇文章主要介紹了C#實現(xiàn)對二維數(shù)組排序的方法,實例分析了C#數(shù)組遍歷與排序的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#把整個文件內(nèi)容讀入字符串變量的方法

    C#把整個文件內(nèi)容讀入字符串變量的方法

    這篇文章主要介紹了C#把整個文件內(nèi)容讀入字符串變量的方法,實例分析了C#操作文件與字符串的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • 對c#中托的理解

    對c#中托的理解

    本篇文章,小編將為大家介紹關(guān)于對c#中托的理解,有需要的朋友可以參考一下
    2013-04-04
  • C#實現(xiàn)數(shù)據(jù)包加密與解密實例詳解

    C#實現(xiàn)數(shù)據(jù)包加密與解密實例詳解

    這篇文章主要介紹了C#實現(xiàn)數(shù)據(jù)包加密與解密的方法,是一項很實用的技能,需要的朋友可以參考下
    2014-07-07
  • C#中string用法實例詳解

    C#中string用法實例詳解

    這篇文章主要介紹了C#中string用法,非常詳細的總結(jié)了比較常見的關(guān)于C#中string的幾個常用方法,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)的二維數(shù)組排序算法示例

    C#實現(xiàn)的二維數(shù)組排序算法示例

    這篇文章主要介紹了C#實現(xiàn)的二維數(shù)組排序算法,涉及C#針對二維數(shù)組的遍歷、判斷、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • C#獲取文件相關(guān)信息的方法

    C#獲取文件相關(guān)信息的方法

    這篇文章主要介紹了C#獲取文件相關(guān)信息的方法,涉及C#中FileInfo類的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Quartz.Net使用方法詳解

    Quartz.Net使用方法詳解

    本文詳細講解了Quartz.Net的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#中析構(gòu)函數(shù)、Dispose、Close方法的區(qū)別

    C#中析構(gòu)函數(shù)、Dispose、Close方法的區(qū)別

    本文詳細對比了C#中析構(gòu)函數(shù)、Dispose和Close方法的區(qū)別,三者都是釋放資源,本文介紹了他們各自的使用方法和使用場景,希望對大家有所幫助。
    2016-04-04

最新評論

伊川县| 枞阳县| 徐闻县| 闽侯县| 德州市| 南京市| 拉萨市| 余干县| 新田县| 麻江县| 利津县| 财经| 清徐县| 莎车县| 北辰区| 罗江县| 惠安县| 赫章县| 乌海市| 廉江市| 丽江市| 惠来县| 陵川县| 盘山县| 平顶山市| 额尔古纳市| 四平市| 沁水县| 衡水市| 靖边县| 千阳县| 南澳县| 孝义市| 灵丘县| 上犹县| 汕头市| 宜兰县| 襄城县| 长葛市| 巴彦淖尔市| 金堂县|