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