値の型は、2つのうちの単純なものです。値型は、データ自体を表すためによく使われます。 3D空間内の整数、ブール値、またはポイントは、すべて適切な値タイプの例です。
値型(構造体)は、structキーワードを使用して宣言されます。新しい構造体を宣言する方法の例については、構文セクションを参照してください。
一般に、値の型を宣言するために使用される2つのキーワードがあります。
参照型はやや複雑です。参照型は、オブジェクト指向プログラミングの意味での伝統的なオブジェクトです。したがって、継承(およびその利点)をサポートし、ファイナライザをサポートします。
C#では一般に次のような参照型があります。
新しい参照型(クラス)は、classキーワードを使用して宣言されます。例については、新しい参照型を宣言する方法の構文セクションを参照してください。
参照型と値型の主な違いを以下に示します。
これはしばしば言及される2つの違いですが、実際には、C#で値型を使用すると、プログラムはその変数を使用してその値を直接参照します。 int mine = 0と言うと、変数mineは0を直接参照して効率的です。しかし、参照型は、基本的なオブジェクトへの参照を実際に保持しています(名前が示唆するように)。これはC ++などの他の言語のポインタに似ています。
すぐにこれに気付かないかもしれませんが、効果はそこにあり、強力で微妙です。例については、参照型の変更例を参照してください。
この相違は、以下の他の相違の主な理由であり、知る価値があります。
値の型がパラメータとしてメソッドに渡されたときに、メソッドが値を変更した場合、その値は変更されません。対照的に、同じ型のメソッドに参照型を渡し、それを変更すると、その同じオブジェクトを使用する他のものは、元の値ではなく新たに変更されたオブジェクトを持ちます。
詳細については、値型とメソッドの参照型の例を参照してください。
もし私がそれらを変更したいのですが?"ref"キーワードを使用してメソッドに渡すだけで、このオブジェクトを参照渡しします。意味、それはメモリ内の同じオブジェクトです。あなたが行う変更は尊重されます。例については、参照渡しの例を参照してください。
かなり言われるように、参照型にnullを割り当てることができます。つまり、割り当てた変数には実際のオブジェクトが割り当てられていないことを意味します。ただし、値型の場合、これは不可能です。しかし、これが必須であれば、値の型をnull値にできるようにNullableを使うことができますが、これがあなたの考えである場合は、クラスが最良のアプローチではないかどうかを強く考えるタイプ。