欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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,作用便是獲取當(dāng)前的UTC時間

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

相關(guān)文章

  • C#中DateTimePicker默認(rèn)值顯示為空的問題

    C#中DateTimePicker默認(rèn)值顯示為空的問題

    這篇文章主要介紹了C#中DateTimePicker默認(rèn)值顯示為空的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C#自定義處理xml數(shù)據(jù)類實例

    C#自定義處理xml數(shù)據(jù)類實例

    這篇文章主要介紹了C#自定義處理xml數(shù)據(jù)類,涉及C#針對XML的打開、讀寫等常用操作,并將其封裝進一個類中以便于調(diào)用,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • C#如何使用PaddleOCR進行圖片文字識別功能

    C#如何使用PaddleOCR進行圖片文字識別功能

    PaddlePaddle(飛槳)是百度開發(fā)的深度學(xué)習(xí)平臺,旨在為開發(fā)者提供全面、靈活的工具集,用于構(gòu)建、訓(xùn)練和部署各種深度學(xué)習(xí)模型,它具有開放源代碼、高度靈活性、可擴展性和分布式訓(xùn)練等特點,這篇文章主要介紹了C#使用PaddleOCR進行圖片文字識別,需要的朋友可以參考下
    2024-04-04
  • C# 啟用事務(wù)提交多條帶參數(shù)的SQL語句實例代碼

    C# 啟用事務(wù)提交多條帶參數(shù)的SQL語句實例代碼

    這篇文章主要介紹了C# 啟用事務(wù)提交多條帶參數(shù)的SQL語句實例代碼,需要的朋友可以參考下
    2018-02-02
  • C#靜態(tài)變量與實例變量實例分析

    C#靜態(tài)變量與實例變量實例分析

    這篇文章主要介紹了C#靜態(tài)變量與實例變量,是深入掌握PHP程序設(shè)計所必須掌握的重要概念,需要的朋友可以參考下
    2014-09-09
  • c#實現(xiàn)攝像頭拍照功能示例

    c#實現(xiàn)攝像頭拍照功能示例

    這篇文章主要介紹了c#實現(xiàn)攝像頭拍照功能示例,需要的朋友可以參考下
    2014-04-04
  • 利用C#實現(xiàn)獲取當(dāng)前設(shè)備硬件信息

    利用C#實現(xiàn)獲取當(dāng)前設(shè)備硬件信息

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)獲取當(dāng)前設(shè)備硬件信息的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • 一篇文章說通C#中的異步迭代器

    一篇文章說通C#中的異步迭代器

    這篇文章主要給大家介紹了如何通過一篇文章說通C#中的異步迭代器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C#異步調(diào)用的好處和方法分享

    C#異步調(diào)用的好處和方法分享

    我們要明確,為什么要進行異步回調(diào)?眾所周知,普通方法運行,是單線程的,如果中途有大型操作(如:讀取大文件,大批量操作數(shù)據(jù)庫,網(wǎng)絡(luò)傳輸?shù)龋?,都會?dǎo)致方法阻塞,表現(xiàn)在界面上就是,程序卡或者死掉,界面元素不動了,不響應(yīng)了
    2012-04-04
  • C# Winform實現(xiàn)截圖工具的示例代碼

    C# Winform實現(xiàn)截圖工具的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用C# Winform制作一個簡單的截圖工具,從而實現(xiàn)截圖功能,文中的示例代碼講解詳細(xì),有需要的可以參考下
    2024-02-02

最新評論