値の型と参照型

C# では多くの異なるデータ型を使用できるので、適切なデータ型を選択して使用するには、各データ型の機能と、別のデータ型ではなくあるデータ型を選択する判断基準を理解しておく必要があります。

ただし、多くのデータ型の中から 1 つを選択する 理由 について説明するには、その前にまず、C# と .NET でのデータとデータ型の動作を理解し、似たデータ型の間の重要な区別など、データ型についてさらに詳しく学習する必要があります。

データとは

"データとは何か" という質問に対する答えは、誰がどのようなコンテキストで質問しているかによって異なってきます。

ソフトウェア開発では、データは基本的に、コンピューターのメモリに一連のビットとして格納される値です。 ビット とは、0 または 1、というよりむしろそれぞれ "オフ" と "オン" として表された単純なバイナリ スイッチです。 1 ビットでは何の役にも立ちそうにありませんが、8 ビットを 1 つのシーケンスで組み合わせると、バイト が形成されます。 バイトで使用する場合、各ビットはそのシーケンスの中で意味を持ちます。 実際、2 進法 (または、2 を底とする記数法) を使用した場合、わずか 8 ビットで 256 の異なる組み合わせを表すことができます。

たとえば、2 進法では、数値 19511000011 として表すことができます。 次の表を見れば、このしくみを理解しやすいでしょう。 最初の行には、バイト内の位置に対応する 8 つの列があります。 各位置では異なる数値を表しています。 2 番目の行には、個々のビットの値 (0 または 1) を格納できます。

128 64 32 16 8 4 2 1
1 1 0 0 0 0 1 1

2 行目が 1 になっている列に対応する 1 行目の値を加算すると、2 進数表現に相当する 10 進数が得られます。 この例では、128 + 64 + 2 + 1 = 195 になります。

255 より大きい値をコンピューターで使用するには、より多くのバイトを格納する必要があります。 科学的な設定で何百万もの大きな数値を使用する場合は、使用しているデータ型についていっそう慎重に検討することが必要な場合があります。 コードを実行するために、より多くのメモリが必要になります。

テキスト データについて

コンピューターで認識されるのが 01 だけだとすると、どうすればテキストを使用できるのでしょう? ASCII などのシステムを使用すると、1 バイトを使用して、大文字と小文字、数字、タブ、バックスペース、改行、および多くの数学記号、ブロック、線などを表すことができます。

たとえば、小文字の a をアプリケーションに値として格納したい場合、コンピューターではその値のバイナリ形式のみが認識されます。 コンピューターによってどのように処理されるかを理解したい場合は、最初に ASCII 値とそれに相当する 10 進値がわかる ASCII 表を見つける必要があります。 "ASCII 参照 10 進" という語句を検索すると、そのようなリソースをオンラインで見つけることができます。

この例では、小文字 a は、10 進値 97 に相当します。 次に、同じ 2 進法を逆に使用して、ASCII 文字 a がコンピューターによってどのように格納されるかを確認します。

128 64 32 16 8 4 2 1
0 1 1 0 0 0 0 1

または、64 + 32 + 1 = 97 です。

通常、この種の変換を自分で行う必要はありませんが、コンピューターから見たデータを理解することは、特にデータ型について考える上で、基本的な概念といえます。

データ型とは

データ型とは、値のために確保するメモリの量が定義されているプログラミング言語のコンストラクトです。 プログラミング言語の設計者は、言語がさまざまなアプリケーションやデータのサイズに対して使用されることを理解しているので、多くのデータ型が用意されています。

これからのキャリアで作成するアプリケーションの種類を考えると、使用可能なすべてのデータ型の小さなサブセットになることがわかるでしょう。 ただし、それでも他のデータ型が存在することとその理由を知っておくことは不可欠です。

値の型と参照型

データ型には、値の型参照型 の 2 つの基本カテゴリがあります。 値の型と参照型の基本的な違いは、アプリケーションの実行時にそれらの値がメモリに一時的に格納される場所に関するものです。 値が格納される場所は、宣言 (誕生)、割り当てと取得 (活動)、終了 (死) という値の一生が .NET ランタイムによって管理される方法に影響します。 これはさらに、値の型または参照型を操作するときに使用する構文に影響を及ぼします。

このモジュールでは、単純な値の型と参照型に焦点を当てます。 C# についての学習を進めていくと、値の型と参照型の基本的な違いに関して、細かい点が新しくわかってきます。

単純な値の型

単純な値の型は、C# によってキーワードとして提供されている定義済みの型のセットです。 これらのキーワードは、.NET クラス ライブラリで定義されている定義済みの型のエイリアスにすぎません。 たとえば、C# のキーワード int は、.NET クラス ライブラリで System.Int32 として定義されている値の型のエイリアスです。

単純な値の型には、charbool などのように、既に使ったことがあるかもしれない多くのデータ型が含まれています。 また、広範な整数と小数を表すために、多くの 整数 型および 浮動小数点数 型があります。

注意

単純な値の型に加えて、値の型には他に列挙型と構造体が含まれます。 ただし、それらについては他のモジュールで説明します。

まとめ

  • 値はビットとして格納され、ビットは単純なオン/オフ スイッチです。 これらのスイッチを十分に組み合わせると、可能性のあるほとんどすべての値を格納できます。
  • データ型には、値の型と参照型の 2 つの基本カテゴリがあります。 違いは、プログラムの実行時にコンピューターによって値がどのようにして、どこに格納されるかという点です。
  • 単純な値の型には、符号付きおよび符号なしの整数数値の型と浮動小数点数値型が含まれます。