■C#のデータ型について
C#は.NETの Common Type System に定義された.NETデータ型を使います。C#はint、double、stringなどC#キーワードでデータ型を表現できるし、System.Int32、System.Double、System.Stringなど.NETデータクラスでも表現できます。
内部的には、C#キーワードのデータ型をコンパイルして、.NETデータ型へ変更します。
C#データ型 | .NETデータ型 | 説明 |
bool | System.Boolean | True of False |
byte | System.Byte | 8ビット unsigned integer |
sbyte | System.SByte | 8ビット signed integer |
short | System.Int16 | 16ビット signed integer |
int | System.Int32 | 32ビット signed integer |
long | System.Int64 | 64ビット signed integer |
ushort | System.UInt16 | 16ビット unsigned integer |
uint | System.UInt32 | 32ビット unsigned integer |
ulong | System.UInt64 | 64ビット unsigned integer |
float | System.Single | 32ビット single precision 浮動小数点 |
double | System.Double | 64ビット double precision 浮動小数点 |
decimal | System.Decimal | 128ビット Decimal |
char | System.Char | 16ビット Unicode 文字列 |
string | System.String | Unicode 文字列 |
System.DateTime | 日付、時間 | |
object | System.Object | 全てのタイプを含められる |
■C#のリテラルデータ
C#で1234, true, false, “ABCD”のように値を直接使うことができ、これをリテラル(Literal)と言います。リテラルデータを使用時、別の接尾辞(Suffix)がないと、C#コンパイラはint, double, char, string, boolなどのデータ型にその値を代入します。なので、特定のデータ型を指定したい場合は、リテラルデータに1〜2文字の指定接尾辞(Suffix)を付ける必要があります。Suffixは大・小文字の区別をしません。つまりdecimalを示す接尾辞Mは1024Mや1024mのどちらでも使えます。
C#リテラルデータタイプ | Suffix(大・小文字使用可) | 例 |
long | L | 2020L |
uint | U | 2020U |
ulong | UL | 2020UL |
float | F | 20.20F |
double | D | 20.20D(または20.20) |
decimal | M | 20.20M |
■データ型の例
// Boolean
bool flg = true;
// Numeric
short s = -123;
int i = 123;
long l = 123L;
float f = 123.4F;
double d = 123.4D;
decimal dc = 123.4M;
// String
char c = ‘a’;
string s = “ABC”;
// DateTime
DateTime dt = new DateTime(2020, 6, 2, 10, 0, 0);
■最小・最大値プロパティ
.NETデータ型のMaxValue, MinValueプロパティでデータ型の最小・最大値を使えます。
int max = int.MaxValue;
float min = float.MinValue;
■NULL
ある変数がメモリ上にどんなデータも持っていないと言う意味でNULLを使います。
全てのデータ型がNULLを持つことはできなく、持てる型(Referenceタイプ)と持てない型(Valueタイプ)で区別できます。
■Nullable Type
intやDateTimeなどValue Typeは、基本NULLを持てませんが、C#2.0からこれらのタイプもNULLを持てるようになりました。それをNullable Typeと言います。
intやDateTimeの後ろに「?」を付けるとNullable Typeになります。
int? a = null;
a = 10;
bool? flg = null;