协调结构和日期时间的属性

本文关键字:属性 时间 日期 结构 协调 | 更新日期: 2023-09-27 18:35:59

我一直在浏览日期时间结构,我有点困惑。

我对结构体的理解是,您不能分配字段的"默认值"。如果使用结构的默认构造函数(这不是您可以控制的内容),则任何字段都将使用其值类型的默认值进行初始化。

这一切都很好,但是为什么日期时间的"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比这更复杂,但它给出了正确的想法:)想象一下"字段明确设置为 0 的DateTime"意味着什么......"默认"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的好方法。