C#の変数とは?宣言・型・使い方を初心者向けにわかりやすく解説
はじめに
C#でプログラミングを始めると、最初に学ぶことの一つが「変数」です。変数は、数値や文字列などのデータを一時的に保存し、プログラムの中で利用するために欠かせません。
たとえば、ユーザーの名前、商品の価格、ゲームの得点などを扱う場合、それぞれのデータを変数に入れて管理します。
string userName = "佐藤";int score = 100;この例では、userNameという変数に「佐藤」、scoreという変数に100を保存しています。
この記事では、C#の変数について、宣言方法、型、代入、使い方、スコープ、定数との違いなどを初心者向けにわかりやすく解説します。
1. C#の変数とは?
1-1. 変数は「データを一時的に入れておく箱」
変数とは、プログラムで使用するデータを一時的に保存しておく場所です。初心者向けの説明では、よく「名前が付いた箱」にたとえられます。
たとえば、年齢を保存する箱を用意する場合は、次のように記述します。
int age = 20;このコードでは、それぞれの部分に次の意味があります。
int:保存するデータの型age:変数の名前20:変数に保存する値
ageという名前の箱を用意し、その中に整数の20を入れているイメージです。
1-2. C#で変数を使う理由
変数を使う主な理由は、データをわかりやすく管理し、繰り返し利用できるようにするためです。
変数を使わず、同じ値を直接何度も記述すると、値を変更するときにすべての場所を書き換えなければなりません。
Console.WriteLine(1000 * 2);Console.WriteLine(1000 * 3);Console.WriteLine(1000 * 5);商品の価格を変数にすると、次のように整理できます。
int price = 1000;Console.WriteLine(price * 2);Console.WriteLine(price * 3);Console.WriteLine(price * 5);
価格を変更したい場合は、priceに代入する値を1か所変更するだけです。変数を使うことで、コードが読みやすくなり、修正もしやすくなります。
1-3. 変数と値の関係を初心者向けに解説
変数はデータを保存する場所であり、値は変数の中に保存される具体的なデータです。
int score = 80;この場合、scoreが変数で、80が値です。
変数には、あとから別の値を代入することもできます。
int score = 80;score = 100;最初は80だったscoreの値が、2行目の代入によって100に変更されます。通常、変数には現在代入されている最新の値が保存されています。
2. C#の変数宣言の基本
2-1. 変数宣言の基本構文
C#で変数を宣言するときは、基本的に次の形式で記述します。
データ型 変数名;整数を保存する変数を宣言する例は、次のとおりです。
int number;このコードによって、整数を保存できるnumberという変数が用意されます。
C#では、基本的に文の最後にセミコロン;を付けます。セミコロンを忘れるとコンパイルエラーになるため注意しましょう。
2-2. 型を指定して変数を宣言する方法
C#の変数には、保存するデータの種類を表す「型」があります。
int age;string name;bool isActive;それぞれの変数に保存できるデータは異なります。
age:整数name:文字列isActive:trueまたはfalse
C#は静的型付け言語です。変数の型はコンパイル時に決まり、原則として異なる型の値を自由に代入することはできません。
2-3. 変数に値を代入する方法
変数に値を入れることを「代入」と呼びます。代入には=演算子を使用します。
int age;age = 20;=は、数学で使う「左右が等しい」という意味ではありません。C#では、右側の値を左側の変数に保存するという意味です。
次のコードでは、priceに1500を代入しています。
int price;price = 1500;2-4. 宣言と代入を同時に行う方法
変数の宣言と最初の代入は、1行で同時に行えます。
int age = 20;string name = "田中";bool isMember = true;変数を宣言すると同時に最初の値を設定することを「初期化」と呼びます。
変数を宣言しただけで値を入れないと、場所によっては使用時にエラーになることがあります。そのため、必要な初期値が決まっている場合は、宣言と初期化を同時に行うのがわかりやすい書き方です。
3. C#でよく使う変数の型
3-1. int型:整数を扱う
int型は、小数点を含まない整数を扱う型です。
int age = 25;int score = 100;int temperature = -5;年齢、個数、得点など、整数で表現できるデータに適しています。
int型で扱える範囲を超える大きな整数が必要な場合は、long型などを使用します。
long population = 8000000000L;3-2. double型・float型:小数を扱う
小数を扱う代表的な型には、double型とfloat型があります。
double height = 170.5;float weight = 60.5f;C#では、小数リテラルは通常double型として扱われます。float型の値を直接記述するときは、末尾にfまたはFを付けます。
float rate = 1.5f;一般的な小数計算ではdoubleがよく使われます。ただし、金額のように誤差をできるだけ避けたいデータには、decimal型が適しています。
decimal price = 1980.50m;decimal型のリテラルには、末尾にmまたはMを付けます。
3-3. string型:文字列を扱う
string型は、名前やメッセージなどの文字列を扱う型です。文字列はダブルクォーテーション"で囲みます。
string name = "鈴木";string message = "こんにちは";複数の文字列を+演算子で連結することもできます。
string firstName = "太郎";string lastName = "山田";string fullName = lastName + firstName;Console.WriteLine(fullName);
文字列の中に変数の値を埋め込む場合は、文字列補間を使うと読みやすくなります。
string name = "山田";int age = 20;Console.WriteLine($"名前は{name}、年齢は{age}歳です。");
3-4. bool型:true/falseを扱う
bool型は、真偽値であるtrueまたはfalseを保存する型です。
bool isLogin = true;bool hasPermission = false;条件を満たしているか、機能が有効か、処理が成功したかといった状態を表すときに使用します。
bool isAdult = true;if (isAdult){Console.WriteLine("成人です。");}
3-5. char型:1文字を扱う
char型は、1文字だけを扱う型です。値はシングルクォーテーション'で囲みます。
char grade = 'A';char symbol = '!';char initial = 'T';string型ではダブルクォーテーション、char型ではシングルクォーテーションを使う点に注意しましょう。
string text = "A";char character = 'A';見た目が似ていても、string型とchar型は異なる型です。
4. C#の変数の使い方をコード例で解説
4-1. 数値を変数に入れて計算する
数値を変数に保存すると、四則演算などの計算に利用できます。
int price = 1200;int quantity = 3;int total = price * quantity;Console.WriteLine(total);
実行結果は次のとおりです。
3600計算結果も別の変数に保存できます。変数名をtotalのように意味のある名前にすると、何を計算しているコードなのか理解しやすくなります。
割り算をするときは、型に注意が必要です。
int result = 5 / 2;Console.WriteLine(result);この結果は2です。両方がint型の場合、小数部分は保存されません。小数まで求める場合は、double型などを使います。
double result = 5.0 / 2.0;Console.WriteLine(result);この結果は2.5です。
4-2. 文字列を変数に入れて表示する
文字列を変数に入れ、Console.WriteLineで表示できます。
string userName = "佐藤";Console.WriteLine(userName);文章と変数の値を一緒に表示する場合は、文字列補間が便利です。
string productName = "ノート";int price = 300;Console.WriteLine($"{productName}の価格は{price}円です。");
実行結果は次のようになります。
ノートの価格は300円です。4-3. bool型の変数を条件分岐で使う
bool型の変数は、if文による条件分岐でよく使われます。
bool isLoggedIn = true;if (isLoggedIn){Console.WriteLine("ログインしています。");}else{Console.WriteLine("ログインしていません。");}
isLoggedInがtrueなら最初の処理、falseならelse側の処理が実行されます。
比較結果をbool型の変数に保存することも可能です。
int age = 20;bool isAdult = age >= 18;Console.WriteLine(isAdult);
ageが18以上なので、isAdultにはtrueが代入されます。
4-4. 変数の値をあとから変更する
変数の値は、宣言したあとで変更できます。
int score = 50;Console.WriteLine(score);score = 80;Console.WriteLine(score);
実行結果は次のとおりです。
5080現在の値を使って更新することもできます。
int score = 50;score = score + 10;Console.WriteLine(score);
scoreの値は60になります。次のように短く書くこともできます。
score += 10;1だけ増減させる場合は、++や--を使用できます。
int count = 0;count++;count--;
Console.WriteLine(count);
5. varを使った変数宣言
5-1. varとは?
C#では、型名の代わりにvarを使ってローカル変数を宣言できます。
var age = 20;var name = "佐藤";var isActive = true;varを使うと、右辺の値からコンパイラが型を推論します。この例では、各変数の型は次のように決まります。
age:int型name:string型isActive:bool型
varは「どのような型でも自由に代入できる型」ではありません。一度型が推論されると、その変数の型は変わりません。
var number = 10;// number = "文字列"; // int型の変数なのでエラー5-2. varを使える場面
varは、主にメソッド内のローカル変数で使用します。宣言時に型を判断できる値を代入する必要があります。
var count = 10;var message = "完了しました";var numbers = new List<int>();右辺を見れば型が明らかな場合は、varを使うことでコードを簡潔にできます。
var users = new List<string>();型名を明示すると、次のようになります。
List<string> users = new List<string>();どちらもList<string>型の変数です。
5-3. varを使うときの注意点
varを使う場合は、宣言と同時に値を代入しなければなりません。
// var number; // 型を推論できないためエラーまた、nullだけでは具体的な型を判断できません。
// var name = null; // 型を推論できないためエラー型を明示すれば、nullで初期化できる場合があります。
string? name = null;varを多用すると、コードを見ただけでは変数の型がわかりにくくなることがあります。右辺から型を判断しにくい場面では、型名を明示したほうが読みやすくなります。
5-4. 型指定とvarの使い分け
型指定とvarのどちらを使うかは、コードの読みやすさを基準に判断します。
型を明示すると、変数の種類がすぐにわかります。
int totalPrice = 5000;一方、右辺から型が明確な場合は、varでも意味が伝わります。
var products = new List<string>();C#の学習を始めたばかりの段階では、まず型を明示して、それぞれの型の特徴を覚える方法がおすすめです。型に慣れてから、読みやすさを損なわない範囲でvarを使うとよいでしょう。
6. C#の変数名の付け方
6-1. 変数名に使える文字とルール
C#の変数名には、文字、数字、アンダースコア_などを使用できます。ただし、数字から始めることはできません。
使用できる例は次のとおりです。
int score;int score1;int userAge;int _count;次のような変数名は使用できません。
// int 1score; // 数字から始まっている// int user-name; // ハイフンが含まれている// int user name; // 空白が含まれているC#では日本語の変数名も使用できますが、一般的な開発では英単語を使うことが多いでしょう。
6-2. わかりやすい変数名を付けるコツ
変数名は、その変数に何が保存されているのか理解できる名前にします。
次の名前だけでは、用途がわかりにくくなります。
int a = 1000;int b = 3;int c = a * b;意味のある名前を付けると、コードの内容が明確になります。
int unitPrice = 1000;int quantity = 3;int totalPrice = unitPrice * quantity;変数名を考えるときは、次の点を意識しましょう。
保存するデータの意味が伝わる
必要以上に省略しない
長すぎる名前にしない
同じ意味の言葉を統一する
bool型は状態がわかる名前にする
bool型では、is、has、canなどから始めると意味が伝わりやすくなります。
bool isActive = true;bool hasPermission = false;bool canEdit = true;6-3. C#でよく使われる命名規則
C#のローカル変数やメソッドの引数には、一般的にキャメルケースが使われます。キャメルケースでは、最初の単語を小文字で始め、2語目以降の先頭を大文字にします。
string userName;int totalPrice;bool isLoggedIn;クラス名、メソッド名、プロパティ名などでは、先頭の単語も大文字にするパスカルケースがよく使われます。
class ProductService{public string ProductName { get; set; } = "";}複数人で開発するときは、プロジェクトやチームで決められた命名規則に従うことが重要です。
6-4. 予約語を変数名に使えない理由
C#には、プログラム上で特別な意味を持つ予約語があります。
代表的な予約語には、次のようなものがあります。
intstringclasspublicifelsereturnこれらはC#の構文として使用されるため、通常はそのまま変数名にできません。
// string class = "A"; // エラー予約語の前に@を付けると識別子として使用できます。
string @class = "A";ただし、コードが読みにくくなりやすいため、特別な理由がなければ予約語と同じ変数名は避けましょう。
7. 変数のスコープと有効範囲
7-1. スコープとは?
スコープとは、宣言した変数を使用できる範囲のことです。
C#では、波かっこ{}で囲まれたブロックがスコープを作ります。
{int number = 10;Console.WriteLine(number);}// Console.WriteLine(number); // スコープ外なのでエラー
numberは波かっこの内側で宣言されているため、その外側からは使用できません。
7-2. ローカル変数とは?
ローカル変数とは、メソッドやブロックの中で宣言される変数です。
static void ShowMessage(){string message = "こんにちは";Console.WriteLine(message);}この例のmessageはローカル変数です。ShowMessageメソッドの中でのみ使用できます。
if文やfor文の中で宣言した変数も、基本的にはそのブロック内でのみ有効です。
if (true){int score = 100;Console.WriteLine(score);}// Console.WriteLine(score); // エラー
7-3. フィールドとは?
フィールドとは、クラスや構造体の内部で、メソッドの外側に宣言される変数です。
class Player{private int score = 0;public void AddScore(){score += 10;}public void ShowScore(){Console.WriteLine(score);}
}
この例のscoreはフィールドです。同じクラス内の複数のメソッドから利用できます。
ローカル変数は一つの処理の中で一時的に使うデータに向いており、フィールドはオブジェクトが持つ状態を保存するのに向いています。
7-4. 変数を使える範囲の注意点
変数は、必要な範囲だけで宣言することが大切です。広い範囲で使える変数が増えると、どこで値が変更されたのか追いにくくなります。
int total = 0;for (int i = 1; i <= 3; i++){total += i;}
Console.WriteLine(total);
この例では、iはfor文の中だけで使い、totalはループのあとでも使うため、ループの外で宣言しています。
同じ名前の変数を別の場所で使うと、混乱の原因になる場合もあります。変数を宣言するときは、用途とスコープを意識しましょう。
8. 定数との違い
8-1. 変数と定数の違い
変数は、あとから値を変更できます。
int score = 10;score = 20;一方、定数は一度決めた値をあとから変更できません。C#では、constキーワードを使って定数を宣言します。
const double TaxRate = 0.1;定数に再代入しようとするとエラーになります。
const int MaxScore = 100;// MaxScore = 200; // エラー8-2. constの使い方
constは、コンパイル時に値が決まっていて、その後も変わらないデータに使用します。
const int DaysInWeek = 7;const double Pi = 3.141592;const string AppName = "SampleApp";定数名には、パスカルケースを使うのが一般的です。
定数を使うと、コード内に同じ数値や文字列を何度も直接書かずに済みます。
const double TaxRate = 0.1;double price = 1000;double tax = price * TaxRate;
0.1が税率であることが名前からわかるため、コードの意図が明確になります。
8-3. readonlyとの違い
readonlyも、値の変更を制限するためのキーワードです。ただし、constとは値を設定できるタイミングが異なります。
readonlyフィールドは、宣言時またはコンストラクター内で値を設定できます。
class User{private readonly string userId;public User(string id){userId = id;}
}
constはコンパイル時に値が確定している必要があります。一方、readonlyはオブジェクトの生成時に値を決められます。
たとえば、現在日時をconstにすることはできませんが、readonlyフィールドには設定できます。
class Sample{private readonly DateTime createdAt = DateTime.Now;}8-4. 変更しない値は定数にするべき理由
変更しない値を定数にすると、誤って書き換えることを防げます。
const int MaximumRetryCount = 3;また、値の意味が名前で表現されるため、コードが読みやすくなります。
if (retryCount >= MaximumRetryCount){Console.WriteLine("再試行回数の上限に達しました。");}数値を直接書くよりも、MaximumRetryCountと記述したほうが、その値の目的を理解しやすくなります。
ただし、将来変更される可能性がある設定値は、必ずしもconstにするべきとは限りません。設定ファイルやデータベースから読み込む方法が適している場合もあります。
9. C#の変数で初心者がよく間違えるポイント
9-1. 型が合わない値を代入してしまう
変数の型と代入する値の型が合っていないと、エラーになります。
int age = 20;// age = "二十歳"; // string型なのでエラー文字列として保存する場合は、変数もstring型にします。
string ageText = "二十歳";型を変換できる場合は、明示的な変換を行います。
string input = "20";int age = int.Parse(input);変換できない文字列が入力される可能性がある場合は、int.TryParseを使うと安全です。
string input = "20";if (int.TryParse(input, out int age)){Console.WriteLine($"年齢は{age}歳です。");}else{Console.WriteLine("整数に変換できませんでした。");}
9-2. 初期化していない変数を使おうとする
ローカル変数は、値を代入する前に読み取ることができません。
int score;// Console.WriteLine(score); // 初期化されていないためエラー使用する前に値を代入しましょう。
int score = 0;Console.WriteLine(score);最初の値が決まっていない場合でも、用途に合った初期値を設定できるか検討します。ただし、意味のない初期値を入れると不具合につながることもあるため、変数を使う直前に宣言する方法も有効です。
9-3. 変数名の大文字・小文字を間違える
C#では、英字の大文字と小文字が区別されます。
int score = 100;// Console.WriteLine(Score); // 別の名前として扱われるためエラーscore、Score、SCOREは、それぞれ異なる識別子として扱われます。
int score = 10;int Score = 20;Console.WriteLine(score);Console.WriteLine(Score);
このような書き方は混乱しやすいため、大文字・小文字だけが異なる変数名を同じ範囲で使うことは避けましょう。
9-4. スコープ外の変数を使おうとする
ブロック内で宣言した変数は、そのブロックの外では使用できません。
if (true){string message = "処理に成功しました。";}// Console.WriteLine(message); // スコープ外なのでエラー
ブロックの外でも使う必要がある場合は、外側で変数を宣言します。
string message;if (true){message = "処理に成功しました。";}else{message = "処理に失敗しました。";}
Console.WriteLine(message);
ただし、変数のスコープは必要以上に広げないことも重要です。
10. C#の変数に関するよくある質問
10-1. C#で変数を宣言するには?
C#では、基本的に「型名、変数名、セミコロン」の順番で変数を宣言します。
int number;宣言と同時に値を代入する場合は、次のように記述します。
int number = 10;右辺から型を推論できるローカル変数では、varも使用できます。
var number = 10;10-2. C#のvarは使ってもいい?
varはC#の正式な機能なので、使用して問題ありません。
ただし、右辺から型がわかりにくい場所で多用すると、コードの理解に時間がかかることがあります。型が明確でコードが読みやすくなる場面で使うことが大切です。
var names = new List<string>();初心者は、まずintやstringなどの型を明示して、型の仕組みに慣れてからvarを使うと理解しやすいでしょう。
10-3. 変数と型の違いは?
変数は、値を保存するための名前付きの領域です。型は、その変数に保存できるデータの種類を示します。
int age = 20;この場合、次のように分けられます。
変数:
age型:
int値:
20
型によって、保存できる値や利用できる処理が変わります。
10-4. 変数の値はあとから変更できる?
通常の変数であれば、型に合った値をあとから代入できます。
int score = 50;score = 100;ただし、constで宣言した定数には再代入できません。
const int MaxScore = 100;// MaxScore = 200; // エラーまた、変数の型そのものを途中で変更することはできません。
int number = 10;// number = "10"; // string型の値は代入できない10-5. 初心者はどの型から覚えるべき?
最初は、次の5つの型から覚えるとよいでしょう。
int:整数double:小数string:文字列bool:真偽値char:1文字
特にint、string、boolは、多くのプログラムで頻繁に使います。
int age = 20;string name = "高橋";bool isStudent = true;基本の型に慣れたら、long、decimal、配列、List<T>、独自クラスなど、扱うデータに応じた型を学んでいきましょう。
まとめ
C#の変数は、数値や文字列などのデータを一時的に保存し、プログラムの中で利用するための仕組みです。
変数を宣言するときは、基本的に型と変数名を記述します。
int age = 20;string name = "佐藤";bool isActive = true;C#の変数を扱ううえでは、次のポイントが重要です。
変数には保存するデータに合った型を指定する
宣言した変数は使用前に初期化する
用途が伝わる変数名を付ける
大文字と小文字を正しく区別する
変数のスコープを意識する
変更しない値には
constやreadonlyを検討するvarは右辺から型が明確な場面で使う
変数は、条件分岐、繰り返し、メソッド、クラスなど、C#のほぼすべての処理で使用します。まずはint、string、boolなどの基本的な型を使い、宣言、代入、参照、値の変更を実際に試しながら覚えていきましょう。

