web-dev-qa-db-ja.com

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

intをNULL可能として宣言するとき

int? i=null;

ここでiは参照型になりますか?

131
Vaibhav Jain

いいえ、nullableは構造体です。何が起きているかというと、null許容構造体には2つの値があります。

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

データ型の値を設定すると、構造体はHasValueをtrueに変更します。

Nullable型(C#プログラミングガイド)

129
kemiller2002

From Nullable Types(C#Programming Guide)

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

そして

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

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

24
ChrisF

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

当然、null許容型はnullに設定されます。さらに、null許容型は一般的なstruct制約を満たすことができません。また、HasValuefalseに等しいNULL可能型をボックス化すると、ボックス化されたNULL可能型の代わりにnullポインターが得られます(ボックス化解除でも同様の状況が存在します)。

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

12
Stephen Cleary

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

6
Matthew Abbott

Nullable型を参照型にすることはできません。

http://msdn.Microsoft.com/en-us/library/2cf62fcy.aspx

1
Damien Dennehy

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

0
devlife