协调结构和DateTime的属性

时间:2012-05-31 14:40:34

标签: c# struct

我一直在查看DateTime结构,我有点困惑。

我对结构的理解是你不能分配字段的'默认值'。如果使用了结构的默认构造函数(这不是您可以控制的),那么将使用其值类型的默认值初始化任何字段。

这一切都很好,但为什么DateTime的'Days'属性的默认值等于1?他们如何解决这个问题?

威廉

2 个答案:

答案 0 :(得分:6)

您需要了解字段属性之间的区别。

字段全部初始化为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是一个比这更复杂的 smidge ,但是它提供了正确的想法:)想象一下“A DateTime,字段显式设置为0”意味着......“默认”DateTime只是意味着完全相同的事情。

答案 1 :(得分:1)

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