【发布时间】:2020-06-18 05:58:14
【问题描述】:
if(new DateTime() == default(DateTime))
{
//blah blah...
}
代码“new DateTime()”将创建新实例并为自己占用一些内存。
我想知道代码'default(DateTime)'也创建新实例并占用一些内存或只是比较然后结束
【问题讨论】:
-
对于值类型,它调用 CIL
initobj,它将指定地址处的值类型的每个字段初始化为空引用或适当原始类型的 0 并将其推入堆栈,是的...它是否使用内存?是的,你能用完堆栈内存吗?是的。您是否应该担心这一点,可能不在您的示例中。 -
@SelimYıldız 这个问题只是 'default(DateTime)' 分配一些内存,而不是 'default(DateTime) == new DateTime' 是真还是假。谢谢
-
你检查过stackoverflow.com/a/13957724/5519709那个问题的答案了吗?我认为这也可以回答你的问题,上面写着
default(), for any value type (DateTime is a value type) will always call the parameterless constructor. -
@SelimYıldız 好的,我明白了
-
@Selim um... C# 几乎没有(我想说“从不”,但我懒得使用 ilasm 来编写一个值类型一个显式的无参数构造函数,看看它做了什么)“调用无参数构造函数”用于值类型 - 通常,它使用
initobjIL 指令 - 它当然适用于DateTime
标签: c#