null許容型は参照型ですか?


回答:


136

いいえ、null許容は構造体です。何が起こっているのですか?

  1. データ型の値(intfor int?DateTimefor DateTime?など)。
  2. データ型の値が設定されているかどうかを示すブール値。(HasValueはプロパティです。)

データ型の値を設定すると、構造体はHasValuetrueに変わります。

null可能型(C#プログラミングガイド)


26

null可能型から(C#プログラミングガイド)

Nullable型はSystem.Nullable構造体のインスタンスです。

そして

NULL可能型は、NULLの値を割り当てることができる値型変数を表します。参照型に基づいてnull許容型を作成することはできません。(参照型は既にnull値をサポートしています。)

したがって、それらは参照型ではありません。


14

Null許容型は、値型でも参照型でもありません。これらは値型に似ていますが、参照型のプロパティがいくつかあります。

当然、null許容型はに設定できますnull。さらに、null許容型は一般的なstruct制約を満たすことができません。あなたがNULL可能タイプのボックス場合にも、HasValue等しくfalse、あなたが得ますnull代わりに、箱入りNULL可能タイプのポインタを(同様の状況がアンボクシングで存在します)。

これらのプロパティにより、null許容型が非値型になりますが、これらも参照型ではありません。それらは独自の特殊なnull可能値型です。


6

いいえ、Nullable型は実際には構造体です。ランタイムはnull値の設定をインテリジェントに処理し、そうでない場合に参照型の外観を提供します。


2
私は「主観的に処理する」という質問をします。個人的に私はその振る舞いが混乱し、しばしば煩わしいと感じています。
nicodemus13


0

代わりにnullを渡すことができるため、参照型をnull許容型にする必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.