「DateTime」とは何ですか? C#の意味ですか?
質問
私は .Net 本を読んでいますが、コード例の 1 つに次のフィールドを含むクラス定義があります。
private DateTime? startdate
どういうことですか DateTime?
平均?
解決
以来 DateTime
です struct
, ではありません class
, 、あなたは DateTime
物体, ではありません 参照, 、その型のフィールドまたは変数を宣言するとき。
そして、同じように、 int
ありえない null
, 、 したがって、この DateTime
オブジェクトは決してあり得ません null
, 参考にならないからです。
疑問符を追加すると、 null 許容型, 、つまり、 どちらか それは DateTime
物体、 または それはです null
.
DateTime?
の糖衣構文です Nullable<DateTime>
, 、 どこ Nullable
それ自体は struct
.
他のヒント
これは null 許容の DateTime です。 ?
プリミティブ型/構造がそれが null 許容バージョンであることを示した後。
DateTime は null にならない構造体です。から MSDN:
DateTime 値型は、0001 年 1 月 1 日の真夜中 12:00:00、つまり西暦 12 時 00 分 00 秒からの範囲の値で日付と時刻を表します。(西暦または西暦とも呼ばれます) 西暦 9999 年 12 月 31 日午後 11 時 59 分 59 秒まで(西暦)
DateTime?
ただし、null にすることもできます。
あ ? 値型のサフィックスとして、そうでなければ不可能な null 代入が可能になります。
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
基礎となるタイプがnull参照を割り当てることができる値タイプであるオブジェクトを表します。
つまり、次のように書くことができます。
DateTime? a = null;
if (!a.HasValue)
{
a = DateTime.Now;
if (a.HasValue)
{
Console.WriteLine(a.Value);
}
}
日付時刻? 構文的には以下と同等です Nullable<DateTime>.
これは Nullable< DateTime> と同等です。「?」を追加できます。原始的なタイプまたは構造体に。
基本的にはプリミティブに追加の状態を提供します。値または null を指定できます。値を割り当てる必要がない状況で便利です。したがって、たとえば datetime.min や max を使用する代わりに、null を割り当てて値がないことを表すことができます。
ご存知のとおり、DateTime は構造体であり、DateTime が値型であることを意味します。そのため、DateTime はクラスではないため、参照ではなく DateTime オブジェクトを取得します。その型のフィールドまたは変数を宣言する場合、値型であるため、null で初期化することはできません。 null を受け入れないでください。int と同様に、null にすることはできません。DateTime オブジェクトは参照ではないため、null になることはありません。
ただし、値型の null 許容変数またはフィールドが必要な場合もあります。その場合は、疑問符を使用して null 許容型にし、null を許可します。
例えば:-
日付時刻?日付 = null;
整数?整数値 = null;
上記のコードでは、変数 日付 DateTime のオブジェクトであるか、null です。整数値についても同様です。