时间:2021-05-20
近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容
结论:DateTime是值类型,因为DateTime是结构体,而结构体继承自System.ValueType,属于值类型
一、DateTime是值类型还是引用类型的探索
二、了解DateTime结构体
三、DateTime.Now和DateTime.UtcNow是怎么计算出来的
一、DateTime是值类型还是引用类型的探索
1. 先编写测试代码
将dateTime1赋值给dateTime2,然后改变dateTime1的值,如果dateTime2的的值也跟着改变,那么DateTime便是引用类型,看看结果吧:
dateTime1增加了3天后,dateTime2仍然是2017/4/11,这已经能初步说明问题了。
2. 为了进一步确定结论,最可靠的方法是查看变量的地址,值类型的话,dateTime1和dateTime2的地址应该不同。
看来确实是不同的,DateTime是值类型无疑了。
二、了解DateTime结构体
转到DateTime的定义,也可以看到DateTime确实是struct类型,
看来前面的试验都是无用功了,但DateTime到底是怎样的结构体呢,主要有如下成员
这些成员里面最关键的是Ticks
Ticks的时间值以 100 毫微秒为单位,它的64位中,前两位表示Kind,后面62位表示有多少个毫微秒。Kind用来指示 DateTime 结构是表示本地时间、协调通用时间 (UTC) 还是 UTC 和本地时间都未指定。Kind 字段用于处理本地时间和 UTC 时间之间的转换。
DateTime的值范围在0001/1/1 00:00:00到9999/12/31 23:59:59之间
三、DateTime.Now和DateTime.UtcNow是怎么计算出来的
反编译DateTime.Now如下
太复杂了啊看不懂,但可以看到大致的意思是先获取DateTime.UtcNow,然后转换为本地时间
再反编译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是值类型还是引用类型,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、在C#中,class的变量为引用类型,在C++中class的变量为值类型,如myclassmc,在C++中,mc是值类型,成员存储在程序的栈区,在C#中,m
一、基本概念C#只有两种数据类型:值类型和引用类型值类型在线程栈分配空间,引用类型在托管堆分配空间值类型转为引用类型称成为装箱,引用类型转为值类型称为拆箱以下是
我们继续自学C#编程教程,在上一课中介绍了C#的基本数据类型以及变量,今天这一节课我们来介绍值类型与引用类型!一、什么是值类型与引用类型?C#与大多数面向对象语
本文以一个简单实例讲述了C#装箱和拆箱操作的实现方法,简单来说装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型,是涉及栈和堆的使用方面的东西,学过C#
一、值类型和引用类型C#分两个大类,一类是引用类型;另一类是值类型。引用类型从技术上来讲,就是一个指针,指向具体的数据;而值类型实际就存放数据。因此引用类型大小