2

私はDateTime構造を調べていましたが、少し混乱しています。

構造体に関する私の理解は、フィールドの「デフォルト値」を割り当てることはできないということです。構造体のデフォルトコンストラクターが使用されている場合(これは制御できるものではありません)、フィールドはその値型のデフォルト値を使用して初期化されます。

これはすべて問題ありませんが、DateTimeの「Days」プロパティのデフォルト値が1に等しいのはなぜですか?彼らはどうやってそれをやってのけるのですか?

ウィリアム

4

2 に答える 2

7

フィールドプロパティの違いを理解する必要があります。

フィールドはすべて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これよりも複雑ですが、正しい考えが得られます:)「DateTimeフィールドが明示的に0に設定されたA」が何を意味するか想像してみてください...「デフォルト」DateTimeはまったく同じことを意味します。

于 2012-05-31T14:46:02.740 に答える
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
  ...
}

したがって、実際にMyDateTimeulong、解釈と、それを表示および操作するための多くの優れた方法が含まれていulongます。

于 2012-05-31T16:16:40.200 に答える