第5章 C#のデータ型:連載 改訂版 C#入門(1/4 ページ)
C#のデータ型は実によくできている。基本的なデータ型は構造体の別名であり、値型と参照型やボックス化により、軽量ですっきりしたコードが書ける。
本記事は、(株)技術評論社が発行する書籍『新プログラミング環境 C#がわかる+使える』から許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。
C#にも、整数型や実数型といったデータ型が存在する。本連載では、整数型とは何か、実数型とは何かといったことはすでに承知しているものとして説明を進める。その代わり、C#ならではの興味深い機能がいろいろあるので、それについて解説したいと思う。
5-1 C#の主要なデータ型
C#の主要なデータ型の一覧表をTable 5-1に示す。予約語と別名は、どちらを使っても意味は同じである。このことについては、後で詳しく説明する。
予約語 | 別名 | 意味 |
---|---|---|
sbyte | System.SByte | 符号付き8ビット整数 |
byte | System.Byte | 符号なし8ビット整数 |
short | System.Int16 | 符号付き16ビット整数 |
ushort | System.UInt16 | 符号なし16ビット整数 |
int | System.Int32 | 符号付き32ビット整数 |
uint | System.UInt32 | 符号なし32ビット整数 |
long | System.Int64 | 符号付き64ビット整数 |
ulong | System.UInt64 | 符号なし64ビット整数 |
char | System.Char | 文字型 |
float | System.Single | 単精度実数 |
double | System.Double | 倍精度実数 |
bool | System.Boolean | 論理型(falseとtrueのみ) |
decimal | System.Decimal | 10進型 |
string | System.String | 文字列型 |
Table 5-1 |
5-2 整数型からメソッドを呼ぶ
C#にも、もちろん、普通のプログラミング言語にあるような、整数型や、実数型が存在する。例えば、intという名前のデータ型が整数型を意味するのは、C/C++/Javaなどと同じである。Visual BasicならInteger(あるいはLong)に相当するものである。その点では、それほど違わないように見える。
ところが、実は、intというのは世を忍ぶ仮の姿なのである。intは、別名、System.Int32とも呼ばれる。これは、クラスに似ているが、構造体と呼ばれるものの一種である。構造体については後で説明するが、ここではクラスのようなものと思ってかまわない。さて、実際に、.NET Frameworkのリファレンス・マニュアルで、System名前空間のInt32という項目を引くと、intから利用できる機能がずらりと並んでいる。これらは、int型の数値や変数に対して適用することができる。例えば、文字列に変換するメソッドとして、「ToString()」というものがある。整数の123を文字列に変換する場合は「123.ToString()」という式を書くことができる。整数型の変数iを文字列に変換するのなら、「i.ToString()」となる。このように、整数のようなシンプルなデータ型に対してメソッドなどを使用できるプログラミング言語は多くない。奇異に感じる読者もいるかもしれないが、使いこなせば強力な機能である。
では、本当に「i.ToString()」という構文が機能することを、実際のサンプル・コードList 5-1で確かめてみよう。
1: using System;
2:
3: namespace Sample001
4: {
5: class Class1
6: {
7: [STAThread]
8: static void Main(string[] args)
9: {
10: int i=123;
11: string s = i.ToString();
12: Console.WriteLine( "i={0}, s={1}", i, s );
13: }
14: }
15: }
このソース・コードでは面白い機能を利用しているため、その点だけは注意が必要である。12行目のWriteLineメソッドはこれまで何度も使ってきたが、実は複数の値を書式の中に取り込んで出力する機能を持っている。最初の引数の中の文字列中に「{0}」と書くと、引数の2番目の値がそこに挿入され表示される。「{1}」は引数の3番目、「{2}」は4番目である。例えば、「Console.WriteLine( "AB{0}EF", "CD" );」というコードは、「ABCDEF」を出力する。
これを実行した結果はFig.5-1のようになる。
数値としての値は「123」だが、これを文字列に変換した結果も、123となっている。間違いなく整数型変数に対して、ToString()が機能していることが分かるだろう。
5-3 異なる名前で利用できるデータ型
本章の冒頭に載せたTable 5-1で見て取れるように、intとSystem.Int32のような別名関係は、ほかのデータ型にもすべて存在する。
これらの別名が完全にイコールであることを示すために、List 5-1を別名で書いたものをList 5-2に示そう。
1: using System;
2:
3: namespace Sample002
4: {
5: class Class1
6: {
7: [STAThread]
8: static void Main(string[] args)
9: {
10: System.Int32 i=123;
11: System.String s = i.ToString();
12: Console.WriteLine( "i={0}, s={1}", i, s );
13: }
14: }
15: }
List 5-2は、intの代わりにSystem.Int32、stringの代わりにSystem.Stringと書き直したものである。これを実行するとまったく同じ結果になることが、Fig.5-2から分かるだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.