C# フィールド、ローカル変数宣言時の既定(デフォルト)値
C#では、初期化、代入がなされていない変数は使用できません。
フィールドの場合
フィールドは宣言だけで、規定値がセットされます。
サンプルコード
[highlight_csharp]
class Exercise
{
// フィールドでの宣言は、規定値がセットされる
static int i;
static void Main(string[] args)
{
Console.WriteLine(i);
}
}
// 表示
0
[/highlight_csharp]
主な既定値
値の種類 | 既定値 |
bool | false |
float | 0.0f |
int | 0 |
参照型(stringやクラスのインスタンスなど) | null |
ローカル変数の場合
宣言だけでは、既定値が代入されません。
サンプルコード(1)
[highlight_csharp]
class Exercise
{
static void Main(string[] args)
{
// 宣言だけでは、規定値が代入されない。
int i;
Console.WriteLine(i);
}
}
// 表示 (エラー)
// Use of unassigned local variable 'I'
// <割り当てられていないローカル変数 'i'の使用>
[/highlight_csharp]
サンプルコード(2)
数値を代入しているi = 1;があるため、大丈夫に見えるパターン
xが1でない場合、iに数値が代入されないため上記と同様にエラーになる。
[highlight_csharp]
class Exercise
{
static void Main(string[] args)
{
int i;
int x = 1;
// xが1でない場合、iに値が代入されない
if (x == 1)
{
i = 1;
}
Console.WriteLine(i);
}
}
// 表示 (エラー)
// Use of unassigned local variable 'I'
// <割り当てられていないローカル変数 'i'の使用>
[/highlight_csharp]
サンプルコード(3)
xが1でない場合でも、iに数値が入るためエラーにはならない。
[highlight_csharp]
class Exercise
{
static void Main(string[] args)
{
int i;
int x = 1;
// xが1でない場合でも、iに値が代入される
if (x == 1)
{
i = 1;
}
else
{
i = 2;
}
Console.WriteLine(i);
}
}
// 表示
// 1
[/highlight_csharp]
このようにプログラムを変更することによって、エラーとなるケースがあるため、変数(フィールド含む)は宣言と同時に代入することを推奨します。
ディスカッション
コメント一覧
まだ、コメントがありません