C#基礎文法を初心者向けに完全解説|変数・条件分岐・ループ・クラスまで迷わず学べる入門ガイド
はじめに
C#は、アプリ開発、ゲーム開発、Web開発、業務システム開発など、幅広い分野で使われているプログラミング言語です。文法が比較的わかりやすく、開発環境も整っているため、プログラミング初心者が基礎を学ぶ言語としても人気があります。
ただし、C#を学び始めたばかりの頃は、「変数とは何か」「if文やfor文はどう使うのか」「クラスやオブジェクト指向が難しい」と感じる人も多いです。C#基礎文法を理解するには、いきなり難しいアプリを作ろうとするのではなく、変数、条件分岐、ループ、配列、メソッド、クラスといった基本を順番に押さえることが大切です。
この記事では、C#基礎文法を初心者向けにわかりやすく解説します。サンプルコードを使いながら、C#の書き方や考え方を一つずつ確認していきましょう。
1. C#基礎文法とは?初心者が最初に理解すべき全体像
C#基礎文法とは、C#でプログラムを書くために必要な基本ルールのことです。変数の使い方、計算処理、条件分岐、ループ処理、配列、メソッド、クラスなどが含まれます。
プログラミングでは、文法を知らないままコードを書こうとしても、エラーが出たり、思った通りに動かなかったりします。まずはC#の基礎文法を理解し、短いコードを自分で書いて動かすことが上達への近道です。
1-1. C#でできることと学ばれている理由
C#はMicrosoftが開発したプログラミング言語で、さまざまな用途に使われています。代表的な例としては、Windowsアプリ、Webアプリ、スマートフォンアプリ、ゲーム、クラウドサービス、業務システムなどがあります。
特にゲーム開発ではUnityでC#が使われるため、「ゲームを作りたい」という理由でC#を学ぶ人も多いです。また、Visual Studioなどの開発環境が使いやすく、エラー表示や補完機能が充実している点も初心者に向いています。
C#は文法のルールが比較的しっかりしているため、基礎を身につけると他の言語を学ぶときにも役立ちます。
1-2. C#基礎文法を学ぶ前に知っておきたい用語
C#を学ぶ前に、よく出てくる用語を簡単に確認しておきましょう。
「プログラム」とは、コンピューターに実行してほしい命令を書いたものです。「コード」は、その命令をプログラミング言語で書いた文章です。
「変数」は、値を入れておく箱のようなものです。「データ型」は、数値や文字列など、変数に入れるデータの種類を表します。
「メソッド」は、特定の処理をまとめたものです。「クラス」は、データと処理をまとめるための設計図のようなものです。
最初はすべてを完璧に覚える必要はありません。コードを書きながら、少しずつ意味を理解していけば十分です。
1-3. C#の基本的なプログラム構造
C#のプログラムは、基本的にクラスやメソッドの中に処理を書きます。たとえば、次のようなコードがC#の基本形です。
C#using System;
class Program
{
static void Main()
{
Console.WriteLine("こんにちは、C#!");
}
}
このコードでは、Programというクラスの中にMainメソッドがあります。プログラムを実行すると、Mainメソッドの中に書かれた処理が動きます。
Console.WriteLineは、コンソール画面に文字を表示するための命令です。C#基礎文法を学ぶ最初のステップとして、まずはこのような短いプログラムを動かしてみるとよいでしょう。
1-4. 初心者がつまずきやすいポイント
C#初心者がよくつまずくポイントは、セミコロンの付け忘れ、波かっこの対応ミス、型の間違い、変数名のスペルミスなどです。
たとえば、C#では多くの文の終わりに;を付けます。
C#int age = 20;
セミコロンを忘れるとエラーになります。また、文字列はダブルクォーテーションで囲む必要があります。
C#string name = "Taro";
最初のうちはエラーが出るのは自然なことです。エラーを怖がるのではなく、「どこが間違っているのか」を読み解く習慣をつけましょう。
2. C#の開発環境と最初のプログラム
C#基礎文法を学ぶには、実際にコードを書いて実行できる環境が必要です。教材を読むだけでは、文法の意味はなかなか身につきません。短いコードでもよいので、自分で入力して実行することが大切です。
2-1. C#を学ぶために必要な開発環境
C#を学ぶためには、主に次のような開発環境を使います。
代表的なのは、Visual Studioです。C#開発に必要な機能がまとまっており、初心者でも使いやすい開発環境です。
軽量なエディタを使いたい場合は、Visual Studio Codeと.NET SDKを組み合わせる方法もあります。コード補完やターミナル操作に慣れている人には便利です。
初心者の場合は、まずVisual Studioを使うと学習しやすいでしょう。プロジェクト作成、実行、エラー確認が画面上でわかりやすく行えます。
2-2. Visual Studioと.NETの基本
C#で作ったプログラムを動かすには、.NETという実行環境や開発基盤が使われます。.NETは、C#でアプリを作るための土台のようなものです。
Visual Studioは、C#のコードを書くための統合開発環境です。コードを書く、実行する、エラーを確認する、デバッグする、といった作業をまとめて行えます。
初心者は、まず「コンソールアプリ」を作るのがおすすめです。画面に文字を表示したり、入力を受け取ったりしながら、C#基礎文法を練習できます。
2-3. Hello Worldで学ぶC#の書き方
最初に書くプログラムとして定番なのが、Hello Worldです。
C#using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello World");
}
}
このプログラムを実行すると、コンソール画面に次のように表示されます。
Hello World
短いコードですが、C#の基本構造が含まれています。using System;、class Program、static void Main()、Console.WriteLine()の意味を少しずつ理解していきましょう。
2-4. MainメソッドとConsole.WriteLineの役割
Mainメソッドは、C#プログラムの実行開始地点です。プログラムを起動すると、基本的にMainメソッドの中の処理から順番に実行されます。
C#static void Main()
{
Console.WriteLine("C#を学習中です");
}
Console.WriteLineは、コンソールに文字や数値を表示する命令です。
C#Console.WriteLine(100);
Console.WriteLine("学習を始めました");
C#基礎文法を学ぶ間は、Console.WriteLineを使って変数の中身や計算結果を確認することが多くなります。デバッグの第一歩としても役立ちます。
3. C#の基本ルールとコードの書き方
C#には、コードを書くための基本ルールがあります。細かく見えるルールでも、守らないとエラーになることがあります。まずは、文の終わり、コメント、インデント、名前空間、クラス、メソッドの関係を理解しましょう。
3-1. 文の終わりにセミコロンを書く
C#では、多くの文の終わりにセミコロン;を書きます。
C#int number = 10;
Console.WriteLine(number);
セミコロンは、「ここで命令が終わります」という印です。初心者のうちは付け忘れが多いので、エラーが出たときはまずセミコロンを確認してみましょう。
ただし、if文やfor文、クラスやメソッドの定義など、波かっこを使う構造そのものにはセミコロンを付けない場合が多いです。
C#if (number > 5)
{
Console.WriteLine("5より大きいです");
}
3-2. コメントの書き方
コメントは、プログラムの説明を書くためのものです。コメントに書かれた内容は実行されません。
1行コメントは//を使います。
C#// 年齢を表す変数
int age = 20;
複数行コメントは/* */を使います。
C#/*
ここは複数行のコメントです。
処理の説明を書けます。
*/
コメントを書きすぎる必要はありませんが、処理の意図がわかりにくい部分にはコメントを残すと、後から読み返しやすくなります。
3-3. インデントと読みやすいコード
インデントとは、コードの階層がわかるように行頭に空白を入れることです。C#ではインデントが間違っていても動く場合がありますが、読みやすさに大きく影響します。
読みやすいコードの例です。
C#if (score >= 80)
{
Console.WriteLine("合格です");
}
読みにくいコードの例です。
C#if (score >= 80)
{
Console.WriteLine("合格です");
}
同じ処理でも、インデントが整っているだけで理解しやすくなります。プログラミングでは「動くコード」だけでなく、「読みやすいコード」を書く意識も大切です。
3-4. 名前空間・クラス・メソッドの関係
C#では、コードを整理するために名前空間、クラス、メソッドを使います。
名前空間は、クラスを分類するための入れ物です。クラスは、データや処理をまとめる設計図です。メソッドは、クラスの中に書く具体的な処理のまとまりです。
C#namespace SampleApp
{
class Program
{
static void Main()
{
Console.WriteLine("実行されました");
}
}
}
初心者の段階では、「処理はメソッドの中に書く」「メソッドはクラスの中に書く」「クラスは名前空間で整理できる」と理解しておけば十分です。
4. C#の変数とデータ型
変数とデータ型は、C#基礎文法の中でも特に重要です。プログラムでは、数値や文字列などのデータを扱います。そのデータを一時的に保存しておくために変数を使います。
4-1. 変数とは何か
変数とは、値を入れておく箱のようなものです。たとえば、年齢、名前、点数、合計金額などを変数に入れて扱います。
C#int age = 20;
string name = "Taro";
この例では、ageという変数に20、nameという変数に"Taro"を入れています。
変数を使うと、同じ値を何度も直接書かなくてよくなり、コードの意味もわかりやすくなります。
4-2. 変数の宣言と代入
変数を使うには、まず宣言します。宣言とは、「この名前の変数を使います」と決めることです。
C#int number;
変数に値を入れることを代入といいます。
C#number = 10;
宣言と代入は同時に書くこともできます。
C#int number = 10;
C#では、変数を使う前にデータ型を指定する必要があります。数値を入れるのか、文字列を入れるのかによって、使う型が変わります。
4-3. int・double・string・boolの使い方
C#でよく使う基本的なデータ型には、int、double、string、boolがあります。
intは整数を扱う型です。
C#int age = 25;
doubleは小数を扱う型です。
C#double height = 170.5;
stringは文字列を扱う型です。
C#string message = "こんにちは";
boolは真偽値を扱う型です。trueまたはfalseを入れます。
C#bool isActive = true;
C#基礎文法を学ぶ段階では、まずこの4つの型をしっかり理解しましょう。
4-4. varによる型推論
C#では、varを使って変数を宣言できます。varを使うと、代入された値から型を自動的に判断してくれます。
C#var count = 10;
var name = "Hanako";
var price = 120.5;
この場合、countはint、nameはstring、priceはdoubleとして扱われます。
ただし、varは何でも自由に入れられる型ではありません。最初に代入した値によって型が決まります。
C#var number = 10;
// number = "文字列"; // エラー
初心者のうちは、型を明確に理解するためにintやstringを使って書くのがおすすめです。慣れてきたらvarも活用しましょう。
4-5. 定数constの使い方
値を変更したくない場合は、定数を使います。C#ではconstを使って定数を定義します。
C#const double TaxRate = 0.1;
定数は、一度値を決めると後から変更できません。
C#const int MaxScore = 100;
// MaxScore = 90; // エラー
消費税率、最大値、固定メッセージなど、変わらない値には定数を使うとコードの意図がわかりやすくなります。
4-6. 型変換とキャストの基本
C#では、異なるデータ型を扱うときに型変換が必要になることがあります。
たとえば、整数を小数に変換する場合は自然に変換できます。
C#int number = 10;
double result = number;
一方、小数を整数に変換する場合は、明示的なキャストが必要です。
C#double price = 123.45;
int intPrice = (int)price;
Console.WriteLine(intPrice); // 123
この場合、小数部分は切り捨てられます。
文字列を数値に変換したい場合は、int.Parseなどを使います。
C#string text = "100";
int number = int.Parse(text);
ただし、数値に変換できない文字列を変換しようとするとエラーになります。入力値を扱う場合は注意が必要です。
5. C#の演算子と計算処理
演算子とは、計算や比較、条件判定などを行うための記号です。C#基礎文法では、算術演算子、比較演算子、論理演算子、代入演算子をよく使います。
5-1. 算術演算子の使い方
算術演算子は、足し算、引き算、掛け算、割り算などを行うために使います。
C#int a = 10;
int b = 3;
Console.WriteLine(a + b); // 13
Console.WriteLine(a - b); // 7
Console.WriteLine(a * b); // 30
Console.WriteLine(a / b); // 3
Console.WriteLine(a % b); // 1
%は余りを求める演算子です。偶数・奇数の判定などでよく使います。
C#int number = 8;
if (number % 2 == 0)
{
Console.WriteLine("偶数です");
}
5-2. 比較演算子の使い方
比較演算子は、2つの値を比較するときに使います。結果はtrueまたはfalseになります。
C#int score = 80;
Console.WriteLine(score == 80); // true
Console.WriteLine(score != 80); // false
Console.WriteLine(score > 70); // true
Console.WriteLine(score < 70); // false
Console.WriteLine(score >= 80); // true
Console.WriteLine(score <= 60); // false
==は等しいかどうかを比較します。=は代入なので、間違えないようにしましょう。
C#int x = 10; // 代入
bool result = x == 10; // 比較
5-3. 論理演算子の使い方
論理演算子は、複数の条件を組み合わせるときに使います。
&&は「かつ」、||は「または」、!は「ではない」を表します。
C#int age = 20;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
Console.WriteLine("入場できます");
}
この例では、年齢が18歳以上で、チケットを持っている場合に処理が実行されます。
C#bool isHoliday = false;
if (!isHoliday)
{
Console.WriteLine("今日は平日です");
}
条件分岐では論理演算子をよく使うため、意味をしっかり理解しておきましょう。
5-4. 代入演算子と複合代入演算子
代入演算子=は、変数に値を入れるときに使います。
C#int number = 10;
複合代入演算子を使うと、計算と代入をまとめて書けます。
C#int count = 5;
count += 3; // count = count + 3
count -= 2; // count = count - 2
count *= 4; // count = count * 4
count /= 2; // count = count / 2
コードを短く書けるため、ループ処理や集計処理でよく使われます。
5-5. インクリメント・デクリメントの使い方
インクリメントは、値を1増やす処理です。++を使います。
C#int count = 0;
count++;
Console.WriteLine(count); // 1
デクリメントは、値を1減らす処理です。--を使います。
C#int count = 5;
count--;
Console.WriteLine(count); // 4
for文では、カウンター変数を増やすためによく使います。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
6. C#の条件分岐
条件分岐は、「条件によって実行する処理を変える」ための文法です。C#では、if文やswitch文を使います。
6-1. if文の基本
if文は、条件がtrueの場合に処理を実行します。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
この例では、scoreが60以上なので「合格です」と表示されます。
if文の条件式には、比較演算子や論理演算子を使うことが多いです。
6-2. else・else ifの使い方
条件が成り立たない場合の処理を書きたいときは、elseを使います。
C#int score = 50;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
複数の条件を順番に判定したい場合は、else ifを使います。
C#int score = 85;
if (score >= 90)
{
Console.WriteLine("A評価");
}
else if (score >= 70)
{
Console.WriteLine("B評価");
}
else if (score >= 60)
{
Console.WriteLine("C評価");
}
else
{
Console.WriteLine("再試験");
}
上から順番に条件を確認し、最初に一致した処理だけが実行されます。
6-3. 複数条件を組み合わせる方法
複数条件を組み合わせるときは、論理演算子を使います。
C#int age = 25;
bool hasLicense = true;
if (age >= 18 && hasLicense)
{
Console.WriteLine("運転できます");
}
&&は両方の条件が成り立つ場合にtrueになります。
C#bool isMember = true;
bool hasCoupon = false;
if (isMember || hasCoupon)
{
Console.WriteLine("割引対象です");
}
||はどちらか一方の条件が成り立てばtrueになります。
条件が複雑になりすぎると読みにくくなるため、必要に応じて変数に分けるとわかりやすくなります。
C#bool canEnter = age >= 18 && hasLicense;
if (canEnter)
{
Console.WriteLine("入場できます");
}
6-4. switch文の基本
switch文は、1つの値に応じて処理を分けたいときに使います。
C#int day = 3;
switch (day)
{
case 1:
Console.WriteLine("月曜日");
break;
case 2:
Console.WriteLine("火曜日");
break;
case 3:
Console.WriteLine("水曜日");
break;
default:
Console.WriteLine("該当なし");
break;
}
caseに一致した処理が実行されます。どれにも一致しない場合はdefaultの処理が実行されます。
値が決まったパターンの中から選ばれる場合、if文よりswitch文の方が読みやすくなることがあります。
6-5. 条件分岐でよくあるミス
条件分岐でよくあるミスは、比較演算子と代入演算子を間違えることです。
C#if (score == 100)
{
Console.WriteLine("満点です");
}
比較には==を使います。=は代入です。
また、条件の順番にも注意が必要です。
C#int score = 95;
if (score >= 60)
{
Console.WriteLine("合格");
}
else if (score >= 90)
{
Console.WriteLine("優秀");
}
このコードでは、score >= 60が先に成り立つため、score >= 90の処理は実行されません。より厳しい条件を先に書く必要があります。
7. C#のループ処理
ループ処理は、同じ処理を繰り返すための文法です。C#基礎文法では、for文、while文、do while文、foreach文をよく使います。
7-1. for文の基本
for文は、繰り返す回数が決まっている場合によく使います。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
このコードでは、0から4までが表示されます。
for文は、初期化、条件式、更新処理の3つで構成されます。
C#for (初期化; 条件式; 更新処理)
{
繰り返す処理
}
配列の要素を順番に処理するときにもよく使われます。
7-2. while文の基本
while文は、条件が成り立つ間、処理を繰り返します。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
count++;
}
条件式がtrueの間は処理が続きます。条件が最初からfalseの場合、処理は一度も実行されません。
while文では、条件を変化させる処理を書き忘れると無限ループになるため注意が必要です。
7-3. do while文の基本
do while文は、最初に処理を実行してから条件を確認します。そのため、条件に関係なく最低1回は処理が実行されます。
C#int count = 0;
do
{
Console.WriteLine(count);
count++;
}
while (count < 5);
入力を受け付ける処理など、「まず1回実行したい」場合に使われます。
C#int number;
do
{
Console.WriteLine("1以上の数値を入力してください");
number = int.Parse(Console.ReadLine());
}
while (number < 1);
7-4. foreach文の使い方
foreach文は、配列やListなどの要素を順番に取り出すときに使います。
C#string[] names = { "Taro", "Hanako", "Jiro" };
foreach (string name in names)
{
Console.WriteLine(name);
}
foreach文を使うと、配列の長さやインデックスを意識せずに要素を処理できます。
要素を最初から最後まで順番に読むだけなら、for文よりforeach文の方がシンプルです。
7-5. breakとcontinueの使い方
breakは、ループを途中で終了するために使います。
C#for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
このコードでは、iが5になった時点でループが終了します。
continueは、その回の処理をスキップして次の繰り返しに進むために使います。
C#for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue;
}
Console.WriteLine(i);
}
このコードでは、2だけ表示されません。
7-6. 無限ループを避けるポイント
無限ループとは、条件がずっと成り立ち続け、処理が終わらない状態です。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
// count++を書き忘れると無限ループ
}
無限ループを避けるには、ループの中で条件が変化するようにします。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
count++;
}
また、while (true)を使う場合は、必ずどこかでbreakできる条件を用意しましょう。
8. C#の配列とコレクション
複数のデータをまとめて扱いたいときは、配列やコレクションを使います。C#基礎文法では、まず配列とListを理解するとよいでしょう。
8-1. 配列の基本
配列は、同じ型のデータを複数まとめて管理するための仕組みです。
C#int[] scores = new int[3];
このコードでは、整数を3つ入れられる配列を作っています。
配列の各要素には、インデックス番号を使ってアクセスします。インデックスは0から始まります。
C#scores[0] = 80;
scores[1] = 90;
scores[2] = 75;
8-2. 配列の宣言・初期化・要素へのアクセス
配列は、宣言と同時に値を入れることもできます。
C#int[] scores = { 80, 90, 75 };
要素を取り出すには、インデックスを指定します。
C#Console.WriteLine(scores[0]); // 80
Console.WriteLine(scores[1]); // 90
配列の長さはLengthで取得できます。
C#Console.WriteLine(scores.Length); // 3
配列のインデックスは0から始まるため、最後の要素はLength - 1です。範囲外のインデックスを指定するとエラーになります。
8-3. Listの基本
Listは、要素数を後から増やしたり減らしたりできるコレクションです。使うにはSystem.Collections.Genericを利用します。
C#using System.Collections.Generic;
List<string> names = new List<string>();
names.Add("Taro");
names.Add("Hanako");
names.Add("Jiro");
要素を取り出すには、配列と同じようにインデックスを使います。
C#Console.WriteLine(names[0]); // Taro
要素数はCountで取得できます。
C#Console.WriteLine(names.Count);
8-4. 配列とListの違い
配列は、最初に決めた要素数が基本的に固定です。一方、Listは後から要素を追加したり削除したりできます。
配列は、要素数が決まっているデータを扱うときに向いています。
C#int[] scores = { 80, 90, 75 };
Listは、データの数が変わる可能性がある場合に便利です。
C#List<string> names = new List<string>();
names.Add("Taro");
names.Add("Hanako");
初心者のうちは、「固定なら配列」「増減するならList」と考えると理解しやすいです。
8-5. foreachで配列やListを処理する方法
配列やListの中身を順番に処理するときは、foreach文が便利です。
C#int[] scores = { 80, 90, 75 };
foreach (int score in scores)
{
Console.WriteLine(score);
}
Listでも同じように使えます。
C#List<string> names = new List<string> { "Taro", "Hanako", "Jiro" };
foreach (string name in names)
{
Console.WriteLine(name);
}
すべての要素を順番に表示したい場合や、合計を計算したい場合によく使います。
C#int total = 0;
foreach (int score in scores)
{
total += score;
}
Console.WriteLine(total);
9. C#のメソッド
メソッドは、処理をひとまとまりにしたものです。同じ処理を何度も使いたいときや、コードを読みやすく整理したいときに役立ちます。
9-1. メソッドとは何か
メソッドとは、特定の処理に名前を付けてまとめたものです。たとえば、「あいさつを表示する処理」をメソッドにすると、必要な場所で何度でも呼び出せます。
C#static void SayHello()
{
Console.WriteLine("こんにちは");
}
メソッドを使うと、長い処理を小さく分けられるため、プログラム全体の見通しがよくなります。
9-2. メソッドの定義と呼び出し
メソッドを使うには、まず定義します。そして、必要な場所で呼び出します。
C#class Program
{
static void Main()
{
SayHello();
}
static void SayHello()
{
Console.WriteLine("こんにちは");
}
}
Mainメソッドの中でSayHello()を呼び出すと、SayHelloメソッドの処理が実行されます。
メソッド名は、処理の内容がわかる名前にすると読みやすくなります。
9-3. 引数と戻り値の基本
引数とは、メソッドに渡す値のことです。
C#static void Greet(string name)
{
Console.WriteLine("こんにちは、" + name + "さん");
}
呼び出すときに値を渡します。
C#Greet("Taro");
戻り値とは、メソッドが処理結果として返す値のことです。
C#static int Add(int a, int b)
{
return a + b;
}
戻り値を受け取ることもできます。
C#int result = Add(3, 5);
Console.WriteLine(result); // 8
9-4. voidメソッドの使い方
voidは、戻り値がないメソッドを表します。
C#static void ShowMessage()
{
Console.WriteLine("処理を開始します");
}
このメソッドは文字を表示するだけで、値を返しません。
一方、値を返すメソッドでは、戻り値の型を指定します。
C#static int GetNumber()
{
return 10;
}
メソッドが値を返す必要があるかどうかによって、voidにするか戻り値の型を指定するかを決めます。
9-5. メソッドを使うメリット
メソッドを使うメリットは、コードを整理できることです。長い処理をメソッドに分けることで、何をしているコードなのか理解しやすくなります。
また、同じ処理を何度も書かずに済むため、修正もしやすくなります。
C#static int CalculateTaxIncludedPrice(int price)
{
return (int)(price * 1.1);
}
このようにメソッド化しておけば、税込価格を計算する処理を何度でも使えます。
C#基礎文法を学ぶ段階では、短い処理でも積極的にメソッドに分ける練習をするとよいでしょう。
10. C#のクラスとオブジェクト指向の基礎
C#はオブジェクト指向プログラミングを中心に設計された言語です。オブジェクト指向は最初は難しく感じるかもしれませんが、まずはクラス、インスタンス、フィールド、プロパティ、メソッドの関係を理解しましょう。
10-1. クラスとは何か
クラスとは、データと処理をまとめるための設計図です。たとえば、人を表すPersonクラスを作ることができます。
C#class Person
{
public string Name;
public int Age;
}
このクラスには、名前と年齢を表すフィールドがあります。
クラス自体は設計図なので、実際に使うにはインスタンスを作成します。
10-2. インスタンスとは何か
インスタンスとは、クラスという設計図から作られた実体です。
C#Person person = new Person();
person.Name = "Taro";
person.Age = 20;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
new Person()によって、Personクラスのインスタンスを作成しています。
同じクラスから複数のインスタンスを作ることもできます。
C#Person person1 = new Person();
person1.Name = "Taro";
Person person2 = new Person();
person2.Name = "Hanako";
クラスは設計図、インスタンスは実際に作られたもの、と考えるとわかりやすいです。
10-3. フィールドとプロパティの違い
フィールドは、クラスの中に直接持つ変数です。
C#class Person
{
public string name;
}
プロパティは、外部から値を取得したり設定したりするための仕組みです。
C#class Person
{
public string Name { get; set; }
}
C#では、フィールドを直接公開するよりも、プロパティを使うことが一般的です。
C#Person person = new Person();
person.Name = "Taro";
Console.WriteLine(person.Name);
プロパティを使うと、後から値のチェック処理などを追加しやすくなります。
10-4. コンストラクタの基本
コンストラクタは、インスタンスを作成するときに実行される特別なメソッドです。初期値を設定したいときによく使います。
C#class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
インスタンスを作るときに、名前と年齢を渡します。
C#Person person = new Person("Taro", 20);
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
コンストラクタを使うと、必要な値を最初に設定できるため、安全でわかりやすいコードになります。
10-5. メソッドを持つクラスの作り方
クラスには、データだけでなくメソッドも持たせることができます。
C#class Person
{
public string Name { get; set; }
public void Greet()
{
Console.WriteLine("こんにちは、" + Name + "です");
}
}
呼び出し側では、インスタンスを作ってメソッドを実行します。
C#Person person = new Person();
person.Name = "Taro";
person.Greet();
このように、クラスに関連する処理をメソッドとしてまとめることで、データと処理の関係がわかりやすくなります。
10-6. カプセル化の基本
カプセル化とは、データを外部から直接変更できないようにし、必要な操作だけを公開する考え方です。
C#class BankAccount
{
private int balance;
public void Deposit(int amount)
{
if (amount > 0)
{
balance += amount;
}
}
public int GetBalance()
{
return balance;
}
}
balanceはprivateなので、クラスの外から直接変更できません。代わりに、Depositメソッドを通して入金します。
C#BankAccount account = new BankAccount();
account.Deposit(1000);
Console.WriteLine(account.GetBalance());
カプセル化を使うと、不正な値が入るのを防ぎ、プログラムを安全に保ちやすくなります。
11. C#の文字列処理
文字列処理は、C#のプログラムで頻繁に使います。名前、メッセージ、入力値、ファイル名など、文字列を扱う場面は多くあります。
11-1. string型の基本
C#では、文字列を扱うためにstring型を使います。
C#string message = "こんにちは";
Console.WriteLine(message);
文字列はダブルクォーテーションで囲みます。
C#string name = "Taro";
空の文字列も作れます。
C#string empty = "";
文字列は数値とは異なる型なので、扱い方に注意しましょう。
11-2. 文字列の連結
文字列は+演算子で連結できます。
C#string firstName = "Taro";
string lastName = "Yamada";
string fullName = lastName + " " + firstName;
Console.WriteLine(fullName);
文字列と数値を連結することもできます。
C#int age = 20;
Console.WriteLine("年齢は" + age + "歳です");
ただし、連結が多くなると読みにくくなるため、文字列補間を使うと便利です。
11-3. 文字列補間の使い方
文字列補間を使うと、文字列の中に変数を埋め込めます。文字列の前に$を付け、変数を{}で囲みます。
C#string name = "Taro";
int age = 20;
Console.WriteLine($"名前は{name}、年齢は{age}歳です");
文字列連結よりも読みやすく、C#でよく使われる書き方です。
計算結果を埋め込むこともできます。
C#int price = 100;
int count = 3;
Console.WriteLine($"合計金額は{price * count}円です");
11-4. 文字列の長さや一部を取得する方法
文字列の長さはLengthで取得できます。
C#string text = "Hello";
Console.WriteLine(text.Length); // 5
文字列の一部を取得するには、Substringを使います。
C#string text = "Hello C#";
string part = text.Substring(0, 5);
Console.WriteLine(part); // Hello
文字列の1文字を取り出すこともできます。
C#string text = "ABC";
Console.WriteLine(text[0]); // A
Console.WriteLine(text[1]); // B
インデックスは配列と同じく0から始まります。
11-5. 文字列処理でよく使うメソッド
C#の文字列処理でよく使うメソッドには、Contains、Replace、ToUpper、ToLower、Trimなどがあります。
C#string text = "Hello C#";
Console.WriteLine(text.Contains("C#")); // true
Replaceは文字列を置換します。
C#string text = "Hello Java";
string result = text.Replace("Java", "C#");
Console.WriteLine(result); // Hello C#
Trimは前後の空白を取り除きます。
C#string input = " C# ";
Console.WriteLine(input.Trim());
ユーザー入力を扱うときには、文字列処理のメソッドがとても役立ちます。
12. C#の例外処理
例外処理は、プログラム実行中に起きるエラーに対応するための文法です。C#では、try-catchを使って例外を処理します。
12-1. 例外とは何か
例外とは、プログラムの実行中に発生する予期しない問題のことです。たとえば、数値に変換できない文字列を変換しようとした場合や、存在しないファイルを読み込もうとした場合に例外が発生します。
C#string text = "abc";
int number = int.Parse(text); // 例外が発生する
例外が処理されないと、プログラムが途中で停止してしまいます。安全に動かすためには、必要な場面で例外処理を書くことが大切です。
12-2. try-catchの基本
try-catchを使うと、例外が発生したときの処理を書けます。
C#try
{
string text = "abc";
int number = int.Parse(text);
Console.WriteLine(number);
}
catch
{
Console.WriteLine("数値に変換できませんでした");
}
tryの中に例外が発生する可能性のある処理を書き、catchの中に例外が起きたときの処理を書きます。
例外の情報を受け取ることもできます。
C#try
{
int number = int.Parse("abc");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
12-3. finallyの使い方
finallyは、例外が発生してもしなくても最後に必ず実行される処理です。
C#try
{
Console.WriteLine("処理を開始します");
}
catch
{
Console.WriteLine("エラーが発生しました");
}
finally
{
Console.WriteLine("処理を終了します");
}
ファイルを閉じる、接続を解除する、後片付けをする、といった処理で使われます。
初心者のうちは、まずtry-catchの基本を理解し、必要に応じてfinallyを使うとよいでしょう。
12-4. 例外処理が必要になる場面
例外処理が必要になる場面として、ユーザー入力、ファイル操作、ネットワーク通信、データベース処理などがあります。
たとえば、ユーザーが必ず数値を入力するとは限りません。
C#Console.WriteLine("数値を入力してください");
string input = Console.ReadLine();
try
{
int number = int.Parse(input);
Console.WriteLine($"入力された数値は{number}です");
}
catch
{
Console.WriteLine("正しい数値を入力してください");
}
このように、失敗する可能性がある処理では、例外が起きた場合の対応を考えておくことが重要です。
12-5. 初心者が避けたい例外処理の書き方
初心者が避けたいのは、何でもcatchして何もしない書き方です。
C#try
{
int number = int.Parse("abc");
}
catch
{
}
これでは、エラーが起きたことに気づけません。最低限、エラーメッセージを表示するなど、原因を確認できるようにしましょう。
C#try
{
int number = int.Parse("abc");
}
catch (Exception ex)
{
Console.WriteLine("エラー: " + ex.Message);
}
ただし、例外処理に頼りすぎるのもよくありません。事前に入力チェックできる場合は、int.TryParseのような安全な方法を使うことも大切です。
C#string input = "123";
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値ではありません");
}
13. C#基礎文法の練習問題
C#基礎文法を身につけるには、実際に問題を解くことが大切です。ここでは、初心者向けの練習問題を紹介します。答えを見ながらでもよいので、自分でコードを書いて動かしてみましょう。
13-1. 変数とデータ型の練習
名前、年齢、身長を変数に入れて表示してみましょう。
C#string name = "Taro";
int age = 20;
double height = 170.5;
Console.WriteLine($"名前: {name}");
Console.WriteLine($"年齢: {age}");
Console.WriteLine($"身長: {height}");
変数の型を変えたり、表示する文章を変えたりして練習すると、データ型の理解が深まります。
13-2. 条件分岐の練習
点数によって合格・不合格を判定してみましょう。
C#int score = 75;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
さらに、点数によって評価を分ける練習もおすすめです。
C#int score = 85;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else if (score >= 60)
{
Console.WriteLine("C");
}
else
{
Console.WriteLine("D");
}
13-3. ループ処理の練習
for文を使って、1から10までの数字を表示してみましょう。
C#for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
次に、1から10までの合計を計算してみます。
C#int total = 0;
for (int i = 1; i <= 10; i++)
{
total += i;
}
Console.WriteLine($"合計: {total}");
ループは繰り返し処理の基本なので、さまざまなパターンで練習しましょう。
13-4. 配列とListの練習
配列に点数を入れて、合計と平均を求めてみましょう。
C#int[] scores = { 80, 90, 70, 85 };
int total = 0;
foreach (int score in scores)
{
total += score;
}
double average = (double)total / scores.Length;
Console.WriteLine($"合計: {total}");
Console.WriteLine($"平均: {average}");
Listでも同じように練習できます。
C#List<string> names = new List<string> { "Taro", "Hanako", "Jiro" };
foreach (string name in names)
{
Console.WriteLine(name);
}
配列とListの違いを意識しながら使ってみましょう。
13-5. クラス作成の練習
名前と年齢を持つPersonクラスを作ってみましょう。
C#class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void Introduce()
{
Console.WriteLine($"私は{Name}です。{Age}歳です。");
}
}
使う側のコードは次のようになります。
C#Person person = new Person();
person.Name = "Taro";
person.Age = 20;
person.Introduce();
クラスを作る練習では、「どんなデータを持つか」「どんな処理を持つか」を考えることが大切です。
14. C#基礎文法を効率よく学ぶ手順
C#基礎文法を効率よく学ぶには、順番が重要です。いきなりクラスやオブジェクト指向から始めると難しく感じやすいため、基本的な文法から少しずつ進めましょう。
14-1. 初心者におすすめの学習順序
初心者におすすめの学習順序は、次の流れです。
まず、開発環境を用意してHello Worldを実行します。次に、変数とデータ型を学びます。その後、演算子、条件分岐、ループ処理、配列、List、メソッド、クラスの順に進めると理解しやすいです。
特に、変数、if文、for文は多くのプログラムで使うため、早めに慣れておきましょう。
C#基礎文法は、一度読んだだけで完璧に覚える必要はありません。同じ文法を何度も使うことで自然に身につきます。
14-2. 文法を覚えるだけでなく手を動かす重要性
プログラミングは、読むだけではなかなか上達しません。文法を覚えたら、必ず自分でコードを書いて実行しましょう。
たとえば、if文を学んだら点数判定プログラムを作る、for文を学んだら合計を求めるプログラムを作る、配列を学んだら複数の点数を処理するプログラムを作る、といった練習が効果的です。
エラーが出ても問題ありません。エラーを直す過程で、C#の文法や仕組みへの理解が深まります。
14-3. 小さなアプリを作って理解を深める方法
C#基礎文法をある程度学んだら、小さなアプリを作ってみましょう。おすすめは、コンソールで動く簡単なアプリです。
たとえば、計算機、数当てゲーム、ToDoリスト、成績判定プログラム、家計簿の簡易版などが作りやすいです。
数当てゲームでは、変数、条件分岐、ループ、入力処理を使います。ToDoリストでは、List、ループ、文字列処理を練習できます。
小さなアプリを作ることで、「文法を知っている状態」から「文法を使える状態」に近づけます。
14-4. エラーを読み解く習慣を身につける
プログラミング学習では、エラーを避けることよりも、エラーを読み解く力を身につけることが大切です。
エラーメッセージには、問題が起きた場所や原因のヒントが書かれています。最初は英語で難しく感じるかもしれませんが、よく出るエラーは少しずつ覚えられます。
セミコロン忘れ、スペルミス、型の不一致、波かっこの閉じ忘れなどは、初心者によくあるエラーです。エラーが出たら、慌てずに該当行とその前後を確認しましょう。
14-5. 次に学ぶべきC#の応用分野
C#基礎文法を理解したら、次は目的に合わせて応用分野を学びましょう。
ゲーム開発に興味があるなら、Unityを学ぶのがおすすめです。Web開発をしたいなら、ASP.NETを学ぶとよいでしょう。Windowsアプリを作りたいなら、デスクトップアプリ開発に進めます。
また、LINQ、非同期処理、ファイル操作、データベース、継承、インターフェースなどを学ぶと、より実践的なC#プログラムを書けるようになります。
15. C#基礎文法に関するよくある質問
C#基礎文法を学び始めると、多くの人が同じような疑問を持ちます。ここでは、初心者からよくある質問に答えます。
15-1. C#は初心者でも学びやすい?
C#は初心者でも学びやすい言語の一つです。文法のルールが整理されており、Visual Studioなどの開発環境も充実しています。
ただし、クラスやオブジェクト指向の考え方は最初に難しく感じるかもしれません。焦らず、変数、条件分岐、ループ、配列、メソッドの順に理解してからクラスに進むと学びやすくなります。
初心者は、まずコンソールアプリでC#基礎文法を練習するのがおすすめです。
15-2. C#とJavaの文法は似ている?
C#とJavaの文法は似ている部分が多いです。どちらもクラスを中心にコードを書き、if文、for文、while文、配列、メソッドなどの基本文法も似ています。
そのため、C#を学ぶとJavaの理解にも役立ちますし、Javaを学んだ人がC#を学ぶ場合も比較的スムーズです。
ただし、細かい書き方や標準ライブラリ、開発環境には違いがあります。似ているからといって完全に同じではない点には注意しましょう。
15-3. C#基礎文法の習得にかかる期間は?
C#基礎文法の習得にかかる期間は、学習時間や経験によって変わります。毎日少しずつ学習できるなら、変数、条件分岐、ループ、配列、メソッドの基本は数週間で理解できる人もいます。
ただし、「理解する」と「使いこなせる」は別です。実際にアプリを作りながら練習することで、基礎文法が定着していきます。
目安としては、最初の1か月で基礎文法に慣れ、2〜3か月かけて小さなアプリを作れるようになることを目標にするとよいでしょう。
15-4. C#を学ぶなら何から作るべき?
最初は、コンソールで動く簡単なアプリがおすすめです。たとえば、計算機、数当てゲーム、成績判定プログラム、簡単なメモ管理、ToDoリストなどです。
画面の見た目にこだわるよりも、まずはC#基礎文法を使って処理を組み立てる練習をしましょう。
たとえば、数当てゲームなら、乱数、入力、条件分岐、ループを練習できます。ToDoリストなら、List、文字列処理、foreach文を使えます。
15-5. C#基礎文法の次に学ぶべきことは?
C#基礎文法の次は、オブジェクト指向をより深く学ぶのがおすすめです。クラス、継承、インターフェース、ポリモーフィズムなどを理解すると、C#らしいコードを書けるようになります。
また、実践的な開発では、LINQ、例外処理、ファイル操作、非同期処理、データベース接続なども重要です。
目的がゲーム開発ならUnity、Web開発ならASP.NET、業務アプリならデータベースや設計の学習に進むとよいでしょう。
まとめ
C#基礎文法は、C#でプログラムを書くための土台です。変数、データ型、演算子、条件分岐、ループ、配列、List、メソッド、クラス、文字列処理、例外処理を順番に学ぶことで、基本的なプログラムを自分で作れるようになります。
初心者がC#を学ぶときは、最初から完璧に理解しようとする必要はありません。まずは短いコードを書き、実行し、エラーを直しながら少しずつ慣れていくことが大切です。
特に、Console.WriteLineで結果を確認しながら、変数や条件分岐、ループ処理を繰り返し練習すると、C#基礎文法の理解が深まります。
基礎が身についたら、小さなアプリ作成に挑戦しましょう。実際に作ることで、文法の知識が実践的なスキルに変わります。C#は学べる範囲が広く、ゲーム開発、Web開発、業務システムなど多くの分野に活かせる言語です。まずは基礎文法をしっかり固め、次のステップへ進んでいきましょう。

