C#の型の一覧が見たい
型の判定や切り替えはどうやるの?
こんにちは、エンジニアでC#ライターの遠藤です!
今回の記事では、組み込み型の一覧の紹介と基本的な型の操作について解説します。
この記事は以下のような方のために書きました。
- 組み込み型の一覧が見たい方
- 型のチェックや判定などの基本的な操作が知りたい方
型とは
C#で変数を宣言したさい、その変数はメモリに領域が確保されます。
そこに代入する値がどのような種類の値かによって、入れられる型が変わってきます。適切な型に値を入れないとエラーになってしまうので、型にどんな種類があるかをプログラマは意識しなくてはなりません。
型の種類はまず組み込み型、ユーザー定義型、他の型から合成される型の3種類があります。
その中で値型、参照型に分かれ、それぞれ具体的な型が分類されていきます。
全体を一覧にすると、以下のようになります。
組み込み型 | ユーザー定義型 | 他の型から合成される型 | |
値型 | sbyte, byte short, ushort int, uint long, ulong float, double char bool decimal | struct enum | Nullable |
参照型 | string object | class interface delegate | 配列 |
その他 | ポインター(*) |
最も大きな3つの分類は後に説明します。
値型・参照型ですが、値型というのはその変数に直接値を格納する型で、参照型は値の実体がどこにあるかといった参照情報(アドレス)を保持する型になります。
型の一覧
組み込み型
「組み込み型」とは、C#の仕様として元々定義されている型のことを言います。
組み込み型の一覧は以下になります。
値型
型名 | 型の説明 | 代入例 |
---|---|---|
sbyte | 8ビット整数(符号付き) | sbyte test = 123; |
byte | 8ビット整数(符号無し) | byte test = 123; |
short | 16ビット整数(符号付き) | short test = 123; |
ushort | 16ビット整数(符号無し) | ushort test = 123; |
int | 32ビット整数(符号付き) | int test = 123; |
uint | 32ビット整数(符号無し) | int test = 123; |
long | 64ビット整数(符号付き) | long test =123; |
ulong | 64ビット整数(符号無し) | ulong test = 123; |
float | 32ビット浮動小数 | float test = 123.45F; floatは値の末尾に"F"が必要 |
double | 64ビット浮動小数 | double test = 123.45; |
char | 文字 | char test = 'a'; charはシングルクォートで囲う。複数文字入れたい時は配列にする |
bool | 論理値 (true/falseのみ) | bool test = true(or false); |
decimal | 高精度 10進数浮動小数 | decimal test = 123.45m; decimalは末尾に"m"が必要 |
なお、ビットとは1つの桁を0か1だけで表現した2進数1桁を言います。つまり8ビット整数は2進数8桁で表現される整数の事です。
ビットについて概要が知りたい方は下記の記事が参考になります。外部のサイトになりますので、差し支えない方は参照してください。
⇒ TIME&SPACE: 「ビット」の意味、キチンと説明します
参照型
型名 | 型の説明 | 代入例 |
---|---|---|
string | 文字列 | string test = "abcde"; stringはダブルクォートで囲う |
object | 全ての型の基底となる型 | object test = 123; 代入している整数は一例 |
組み込み型は以上です。よく使われる型は現場によって変わりますが、教材等でよく見かけるのはint, boolean, string, double辺りです。これらはここで覚えてしまいましょう!
ユーザー定義型
「ユーザー定義型」はクラスを代表した、プログラマが自身で内部を定義する必要のある型です。
ユーザー定義型には以下の種類があります。
値型
型名 | 型の説明 |
---|---|
struct | 構造体。メンバ(データやメソッド)を持つことができる。継承はできない。 |
enum | 列挙型。曜日などの決まった値しかとらないデータを格納するさいに使う |
ちなみに教材等で他の言語でもよく使う日付型はDateTime構造体という形で使われております。
参照型
型名 | 型の説明 |
---|---|
class | クラス。 メンバ(データやメソッド)を持つことができる。継承も可能 |
interface | インタフェース。 抽象メンバのみを持つ事ができる。 |
delegate | デリゲート。 メソッドを参照するための型 |
他の型から合成される型
こちらは少々特殊な型になります。他の型と組み合わせて作る型になります。
3種類しかないので、一覧にせず表で説明致します。
Nullable
Nullableは「Null許容型」と言われる型で、値型でnullを許容したい場合に使います。Nullableもまた値型です。
nullとは無効な値そのものの事を言います。
宣言のさいに「?(クエスチョン)」をつけて「型名? 変数名 = 値」のように宣言、初期化します。
配列
配列は複数の値をひとまとめにして一つの変数へ代入するための型で、参照型になります。
宣言には括弧( [] )を使い、「型名[] 変数名 = new 型名[配列の長さ]」というように宣言します。
例:
using System;
class Program
{
public static void Main()
{
int[] score = new int[5];
score[0] = 1;
score[1] = 2;
score[2] = 3;
score[3] = 4;
score[4] = 5;
for(int i=0; i
実行結果:
1 2 3 4 5
このように、一つの配列型変数に複数の値を入れることができます。配列はよく使うので、ここで覚えましょう!
ポインター
ポインターはメモリ上のアドレスをそのまま数値として扱うものです。ただ、C#では基本的にポインターの使用を禁止していて、unsafe内でしか使えないようになっています。
ポインターについて詳しく知りたい方は、以下の記事が良い参考になります。C言語の記事なので、あくまで考え方についてだけ参考にしてください。
型の確認方法
一通り型について把握したところで、ちょっとした関連知識を紹介します。
今使っている変数の型をチェックしたい場合、インスタンス名.GetType()で取得することができます。また、それがある型と一致しているか知りたい場合は、GetType()で取得した値とtypeof(型名)で取得した値とを比較することで確認できます。
実際の例:
using System;
class Program
{
public static void Main()
{
int test = 0; //int型を宣言
Console.WriteLine(test.GetType()); //型名を取得
Console.WriteLine(test.GetType() == typeof(int)); //testの型がintの型と一致しているかチェック
}
}
実行結果:
System.Int32 True
型の切り替えについて
コーディングをしていると、int型をdouble型に変換したり、String型に文字列として格納された数をint型として扱ったりしたい場合があります。
そんな時は以下のようにして変換していきます。
暗黙の変換
int型からlong型へ変換場合など、基本的に同じ整数の型でそのまま変換してもデータが欠損しないと思われるケースでは、「暗黙的な変換」という手段がとれます。
暗黙的な変換は、変換後の型で宣言した変数に変換前の値をそのまま入れることです。
例:
using System;
class Program
{
public static void Main()
{
int before = 12345; //int型 変換前
long after = before; //long型 int型の値をそのまま代入する
Console.WriteLine(after);
Console.WriteLine(after.GetType());
}
}
実行結果:
12345 //値が代入されている System.Int64 //型はlong型になっている
明示的な変換
double型からint型など、小数点以下の値が欠損してしまうような可能性があるケースでは、明示的に値の変換が必要になります。
明示的な変換では、以下のように型の指定(キャスト)をして変換します。
例:
using System;
class Program
{
public static void Main()
{
double before = 123.45; //double型 変換前
int after = (int)before; //int型 明示的にキャスト(型の指定)して変換する
Console.WriteLine(after);
Console.WriteLine(after.GetType());
}
}
実行結果:
123 //小数点以下が切り捨てられている System.Int32 //型はintになっている
Parseメソッドを使う方法
string型(文字列)で表現された数をint型の数値に変換したい場合なども多くあります。
そんな場合では、Parseメソッドを使う方法が便利です。「変換後の変数 = 変換後の型.Parse(変換前の値)」というように宣言すると、変換が可能になります。
例:
using System;
class Program
{
public static void Main()
{
string before = "12345"; //string型 変換前
int after; //int型 変換後
after = int.Parse(before); //変換して代入
Console.WriteLine(after);
Console.WriteLine(after.GetType());
}
}
実行結果:
12345 System.Int32
String <=> int間の変換は、他にもいくつか方法があります。
詳しく知りたい方は以下の記事を参照してみてください。今回のParseをはじめ、複数の方法で解説されています。
まとめ
今回の記事では、以下の点について解説致しました。
- 型とは
- 型の一覧
- 型の確認方法
- 型の切り替え方法
型とはどんな時でも使う基本的な要素です。ここで理解を深め、活用していってください。