我一直在查看 DateTime 结构,我有点困惑。
我对结构的理解是您不能分配字段的“默认值”。如果使用结构的默认构造函数(这不是您可以控制的),那么任何字段都将使用其值类型的默认值进行初始化。
这一切都很好,但是为什么 DateTime 的“Days”属性的默认值等于 1?他们如何做到这一点?
威廉
您需要了解字段和属性之间的区别。
这些字段都初始化为 0,但属性可以对这些字段做他们喜欢的事情。样本:
public struct Foo
{
private readonly int value;
public Foo(int value)
{
this.value = value;
}
public int ValuePlusOne { get { return value + 1; } }
}
...
Foo foo = new Foo(); // Look ma, no value! (Defaults to 0)
int x = foo.ValuePlusOne; // x is now 1
现在显然DateTime
比这更复杂一点,但它给出了正确的想法:) 想象一下“ADateTime
字段显式设置为 0”意味着什么......“默认”DateTime
只是意味着完全相同的东西。
Jon Skeet 是对的,这完全是关于字段和其他成员之间的差异。真的可以像这样制作“约会时间”:
struct MyDateTime
{
// This is the only instance field of my struct
// Ticks gives the number of small time units since January 1, 0001, so if Ticks is 0UL, the date will be just that
readonly ulong Ticks;
// here goes a lot of instance constructors,
// get-only instance properties to show (components of) the DateTime in a nice way,
// static helper methods,
// and lots of other stuff, but no more instance fields
...
}
所以在现实中,MyDateTime
它只是ulong
一种解释,还有很多很好的方式来展示和操纵它ulong
。