csharp exampleで学ぶC#入門|初心者向けサンプルコード集
はじめに
「csharp example」と検索する人の多くは、C#の文法を説明だけでなく、実際に動かせるサンプルコードで学びたいと考えています。
C#は、コンソールアプリ、Webアプリ、業務システム、デスクトップアプリ、ゲームなど、幅広い分野で利用されているプログラミング言語です。しかし、初めて学ぶときは、変数、条件分岐、繰り返し、メソッド、クラスといった概念が一度に登場するため、難しく感じることがあります。
そこで本記事では、初心者向けのC# exampleを、コピーして実行できる形でまとめました。基本文法からオブジェクト指向、例外処理、簡単なアプリ制作まで、順番に学べます。
コードを読むだけでなく、実際に実行し、数値や文字列を変更しながら学習を進めてください。
1. csharp exampleとは?C#入門でサンプルコードを探す人の目的
1-1. csharp exampleで検索するユーザーの検索意図
「csharp example」は、日本語にすると「C#の例」や「C#のサンプルコード」という意味です。
このキーワードで検索する人には、主に次のような目的があります。
C#の基本構文を確認したい
動作するサンプルコードをコピーして試したい
エラーの原因を調べたい
if文やfor文など、特定の文法の使い方を知りたい
小さなプログラムを作りながら学びたい
JavaやPythonなど、ほかの言語との書き方の違いを確認したい
プログラミングは、文章だけを読んでも身につきにくい分野です。短いexampleを実行し、結果を確認することが理解への近道になります。
1-2. C#とcsharp表記の違い
「C#」と「csharp」は、基本的に同じプログラミング言語を指します。
正式な表記は「C#」です。しかし、検索キーワード、ファイル名、URL、サービス名などでは、記号の「#」を使いにくいことがあります。そのため、英単語を組み合わせた「csharp」という表記が使われます。
次の表現は、いずれもC#に関する情報を探すときに使われます。
C# example
csharp example
C# sample code
csharp tutorial
C# サンプルコード
C# 入門
C#の読み方は「シーシャープ」です。「シー井げた」や「シーハッシュ」ではありません。
1-3. 初心者がサンプルコードで学ぶメリット
サンプルコードを使った学習には、次のメリットがあります。
第一に、コードと実行結果の関係を確認できます。たとえば、Console.WriteLineを使ったときに、どの文字が画面へ表示されるのかをすぐに理解できます。
第二に、正しい構文を具体的に学べます。セミコロン、波かっこ、型名など、文章だけでは把握しにくいルールを実際のコードから確認できます。
第三に、コードを改造しながら学べます。表示する文字列や計算する数値を変えることで、各命令の役割をより深く理解できます。
ただし、コードをそのままコピーするだけでは十分ではありません。「なぜこの結果になるのか」を考え、少しずつ書き換えることが重要です。
1-4. この記事で学べるC#の基本範囲
この記事では、次の内容を扱います。
C#を実行する環境の準備
Hello Worldの書き方
変数とデータ型
文字列と数値計算
条件分岐
繰り返し処理
配列、List、Dictionary
LINQ
メソッド
クラスとオブジェクト指向
例外処理
ファイル操作
簡単なアプリの作り方
各サンプルコードは、基本的にコンソールアプリで動かせます。コードごとに内容が独立しているため、試すときはProgram.csの内容を入れ替えてください。
2. C#を動かす準備|サンプルコードを実行する環境
2-1. C#の開発に必要なもの
C#のコードを実行するには、主に次のものが必要です。
C#のソースコードを書くエディター
コードをコンパイルして実行する.NET SDK
作成したプログラムを保存するフォルダー
初心者には、開発に必要な機能がまとまっているVisual Studioが適しています。軽量な環境を使いたい場合は、Visual Studio Codeと.NET SDKを組み合わせる方法もあります。
インストールせずに試したい場合は、ブラウザー上のオンライン実行環境も利用できます。
2-2. Visual StudioでC#を始める方法
Visual Studioは、Microsoftが提供する統合開発環境です。コードエディター、コンパイラー、デバッガーなどが一つにまとまっています。
C#のコンソールアプリを作成する基本手順は次のとおりです。
Visual Studioをインストールする
インストール時に「.NET デスクトップ開発」を選択する
Visual Studioを起動する
「新しいプロジェクトの作成」を選ぶ
「コンソール アプリ」を選ぶ
プロジェクト名と保存場所を決める
プロジェクトを作成する
Program.csへコードを書く実行ボタンを押す
デバッグしながら実行する場合はF5キー、デバッグなしで実行する場合はCtrl+F5キーを使用できます。
2-3. Visual Studio Codeと.NET SDKで始める方法
Visual Studio Codeを使う場合は、Visual Studio Code本体に加えて.NET SDKをインストールします。C#開発用の拡張機能も追加すると、入力補完やデバッグを利用できます。
.NET SDKが利用できるかどうかは、ターミナルで次のコマンドを実行して確認します。
dotnet --versionバージョン番号が表示されれば、基本的な準備は完了です。
新しいコンソールアプリを作成するには、次のコマンドを使用します。
dotnet new console -n CSharpExample作成したフォルダーへ移動します。
cd CSharpExampleプログラムを実行します。
dotnet run2-4. オンライン実行環境でC#コードを試す方法
オンライン実行環境を使うと、ソフトウェアをインストールせずにC#コードを試せます。
基本的な使い方は次のとおりです。
C#に対応したオンライン実行環境を開く
言語としてC#を選択する
エディターへコードを貼り付ける
Runや実行ボタンを押す
出力欄で結果を確認する
短い構文を確認する用途には便利ですが、ファイル操作、複数プロジェクト、大規模なアプリ開発などには向きません。本格的に学習するときは、Visual StudioまたはVisual Studio Codeへ移行するとよいでしょう。
2-5. コンソールアプリの作成と実行手順
コマンド操作でコンソールアプリを作る場合は、次の流れになります。
mkdir CSharpPracticecd CSharpPracticedotnet new consoledotnet rundotnet new consoleを実行すると、Program.csやプロジェクトファイルが作成されます。
Program.csを次のように変更します。
Console.WriteLine("C#の実行に成功しました");保存してから、もう一度実行します。
dotnet runコンソールに次の内容が表示されれば成功です。
C#の実行に成功しました3. 最初のC# example|Hello Worldで基本構文を理解する
3-1. Hello Worldのサンプルコード
最初に、文字を画面へ表示するHello Worldを実行してみましょう。
Console.WriteLine("Hello, World!");実行結果は次のとおりです。
Hello, World!"Hello, World!"は文字列です。C#では、文字列をダブルクォーテーションで囲みます。
命令の末尾には、原則としてセミコロン;を付けます。
3-2. Console.WriteLineの使い方
Console.WriteLineは、コンソールへ文字や数値を出力し、最後に改行するメソッドです。
Console.WriteLine("1行目です");Console.WriteLine("2行目です");Console.WriteLine(100);実行結果は次のようになります。
1行目です2行目です100改行せずに出力したいときは、Console.Writeを使います。
Console.Write("名前:");Console.Write("田中");実行結果は次のとおりです。
名前:田中3-3. Mainメソッドとトップレベルステートメントの違い
最近のC#のコンソールアプリでは、次のように処理を直接記述できます。
Console.WriteLine("トップレベルステートメント");この書き方をトップレベルステートメントと呼びます。初心者でも短くコードを書けることが特徴です。
従来は、次のようにMainメソッドを記述していました。
using System;namespace CSharpExample{internal class Program{static void Main(string[] args){Console.WriteLine("Mainメソッド");}}}
Mainメソッドは、プログラムの開始地点です。トップレベルステートメントを使った場合も、コンパイラーがプログラムの開始処理を補います。
短い練習ではトップレベルステートメントが便利です。一方、既存のプロジェクトや教材ではMainメソッド形式も多いため、両方の書き方を知っておきましょう。
3-4. usingとnamespaceの基本
usingを使うと、名前空間に含まれる型を短い名前で利用できます。
using System;Console.WriteLine("usingのexample");
ConsoleはSystem名前空間に含まれています。環境によっては暗黙的なusingが有効になっており、using System;を書かなくてもConsoleを使用できます。
namespaceは、クラスや型をグループ分けする仕組みです。
namespace MyApplication;class User{public string Name { get; set; } = "";}
大規模なプロジェクトでは、名前の衝突を避け、コードを整理するために名前空間を使用します。
3-5. コメントの書き方
コメントは、コードへ説明を残すために使います。実行結果には影響しません。
1行コメントは//で記述します。
// 画面にメッセージを表示するConsole.WriteLine("こんにちは");複数行コメントは/と/で囲みます。
/*ここは複数行コメントです。プログラムの説明などを書けます。*/Console.WriteLine("コメントのexample");XMLドキュメントコメントは、クラスやメソッドの説明に使用できます。
/// <summary>/// 2つの整数を加算します。/// </summary>static int Add(int a, int b){return a + b;}コメントには、コードを見れば分かることではなく、処理の目的や判断理由を書くと効果的です。
4. C#の基本文法サンプルコード集
4-1. 変数とデータ型のexample
変数は、文字や数値などのデータを一時的に保存するための入れ物です。
string name = "佐藤";int age = 25;double height = 170.5;bool isStudent = false;Console.WriteLine(name);Console.WriteLine(age);Console.WriteLine(height);Console.WriteLine(isStudent);
代表的なデータ型には次のものがあります。
| データ型 | 保存する値の例 |
|---|---|
int | 整数 |
long | 大きな整数 |
float | 単精度浮動小数点数 |
double | 倍精度浮動小数点数 |
decimal | 高精度な小数 |
bool | trueまたはfalse |
char | 1文字 |
string | 文字列 |
型をコンパイラーに推論させる場合は、varを使用できます。
var message = "こんにちは";var count = 10;Console.WriteLine(message);Console.WriteLine(count);
varを使っても、変数の型が自由に変わるわけではありません。messageはstring、countはintとして扱われます。
4-2. 文字列の連結と文字列補間のexample
文字列は、+演算子で連結できます。
string firstName = "太郎";string lastName = "山田";string fullName = lastName + " " + firstName;Console.WriteLine(fullName);
実行結果は次のとおりです。
山田 太郎変数を文章へ埋め込む場合は、文字列補間が便利です。
string name = "山田";int age = 20;Console.WriteLine($"名前は{name}、年齢は{age}歳です。");
$を文字列の先頭に付け、変数や式を{}で囲みます。
計算式も埋め込めます。
int price = 1200;int quantity = 3;Console.WriteLine($"合計金額は{price * quantity}円です。");
4-3. 数値計算のexample
C#では、一般的な算術演算子を利用できます。
int a = 10;int b = 3;Console.WriteLine(a + b); // 加算Console.WriteLine(a - b); // 減算Console.WriteLine(a * b); // 乗算Console.WriteLine(a / b); // 除算Console.WriteLine(a % b); // 余り
int同士を割り算すると、小数部分が切り捨てられます。
int a = 10;int b = 3;Console.WriteLine(a / b);
実行結果は3です。
小数まで求めたい場合は、どちらかをdoubleへ変換します。
int a = 10;int b = 3;double result = (double)a / b;Console.WriteLine(result);
代入と計算を同時に行う演算子もあります。
int score = 10;score += 5;score -= 2;score *= 3;
Console.WriteLine(score);
4-4. bool型と比較演算子のexample
bool型には、trueまたはfalseを保存します。
bool isLoggedIn = true;bool isAdmin = false;Console.WriteLine(isLoggedIn);Console.WriteLine(isAdmin);
比較演算子を使うと、比較結果がbool型で返されます。
int age = 20;Console.WriteLine(age == 20); // 等しいConsole.WriteLine(age != 20); // 等しくないConsole.WriteLine(age > 18); // より大きいConsole.WriteLine(age >= 20); // 以上Console.WriteLine(age < 30); // より小さいConsole.WriteLine(age <= 19); // 以下
複数の条件を組み合わせるときは、論理演算子を使います。
int age = 25;bool hasLicense = true;bool canDrive = age >= 18 && hasLicense;Console.WriteLine(canDrive);
主な論理演算子は次のとおりです。
&&:両方がtrue||:どちらかがtrue!:結果を反転する
4-5. 定数constのexample
プログラムの途中で値を変更しない場合は、constを使って定数を定義できます。
const double TaxRate = 0.10;const string AppName = "CSharp Example";double price = 1000;double tax = price * TaxRate;
Console.WriteLine(AppName);Console.WriteLine($"消費税は{tax}円です。");
定数へ後から別の値を代入することはできません。
const int MaxCount = 10;// コンパイルエラーになる// MaxCount = 20;
定数名には、意味が分かる名前を付けましょう。
4-6. 型変換とParseのexample
数値を文字列へ変換するには、ToStringを使えます。
int number = 123;string text = number.ToString();Console.WriteLine(text);
文字列を整数へ変換するには、int.Parseを使います。
string text = "456";int number = int.Parse(text);Console.WriteLine(number + 10);
ただし、変換できない文字列をParseへ渡すと例外が発生します。
安全に変換するには、TryParseが適しています。
string text = "123";if (int.TryParse(text, out int number)){Console.WriteLine($"変換成功:{number}");}else{Console.WriteLine("整数へ変換できませんでした");}
ユーザー入力など、内容が確実ではない文字列を変換するときは、TryParseを優先すると安全です。
4-7. 標準入力を受け取るexample
コンソールから入力を受け取るには、Console.ReadLineを使います。
Console.Write("名前を入力してください:");string? name = Console.ReadLine();Console.WriteLine($"こんにちは、{name}さん");
整数を入力してもらう場合は、TryParseと組み合わせます。
Console.Write("年齢を入力してください:");string? input = Console.ReadLine();if (int.TryParse(input, out int age)){Console.WriteLine($"来年は{age + 1}歳です。");}else{Console.WriteLine("数字を入力してください。");}
Console.ReadLineの戻り値は、入力を取得できなかった場合にnullになる可能性があります。そのため、戻り値をstring?で受け取っています。
5. 条件分岐のC# example
5-1. if文のサンプルコード
if文は、条件が成立したときだけ処理を実行します。
int age = 20;if (age >= 18){Console.WriteLine("成人です");}
age >= 18の結果がtrueであれば、波かっこの中が実行されます。
条件式には、最終的にbool型になる式を指定します。
5-2. if else文のサンプルコード
条件が成立しなかった場合の処理は、elseへ記述します。
int score = 65;if (score >= 60){Console.WriteLine("合格です");}else{Console.WriteLine("不合格です");}
scoreが60以上なら「合格です」、それ以外なら「不合格です」と表示されます。
5-3. else ifで複数条件を判定するexample
複数の条件を順番に判定するときは、else ifを使います。
int score = 82;if (score >= 90){Console.WriteLine("評価:A");}else if (score >= 80){Console.WriteLine("評価:B");}else if (score >= 70){Console.WriteLine("評価:C");}else{Console.WriteLine("評価:D");}
条件は上から順番に判定され、最初に成立したブロックだけが実行されます。
そのため、点数のような範囲判定では、大きな値の条件から並べることが重要です。
5-4. switch文のサンプルコード
switch文は、一つの値に対して複数の候補を判定するときに便利です。
int day = 2;switch (day){case 1:Console.WriteLine("月曜日");break;case 2:Console.WriteLine("火曜日");break;case 3:Console.WriteLine("水曜日");break;default:Console.WriteLine("該当する曜日がありません");break;}
caseごとに候補を記述します。どの候補にも一致しない場合は、defaultが実行されます。
5-5. switch式のサンプルコード
switch式を使うと、条件に応じた値を簡潔に返せます。
int score = 85;string grade = score switch{>= 90 => "A",>= 80 => "B",>= 70 => "C",>= 60 => "D",_ => "F"};
Console.WriteLine($"評価は{grade}です。");
_は、ほかの条件に一致しなかったすべての値を表します。
曜日番号を文字列へ変換する例は次のとおりです。
int day = 1;string dayName = day switch{1 => "月曜日",2 => "火曜日",3 => "水曜日",4 => "木曜日",5 => "金曜日",6 => "土曜日",7 => "日曜日",_ => "不正な値"};
Console.WriteLine(dayName);
5-6. 条件分岐でよくあるエラーと対処法
よくある間違いは、比較演算子==と代入演算子=の混同です。
int number = 10;if (number == 10){Console.WriteLine("10です");}
値が等しいか確認するときは==を使います。
文字列を比較するときは、大文字と小文字の違いにも注意します。
string command = "START";if (command.Equals("start", StringComparison.OrdinalIgnoreCase)){Console.WriteLine("開始します");}
また、条件式の末尾へ不要なセミコロンを付けないようにします。
// 意図しない動作につながるため注意// if (number > 0);// {// Console.WriteLine("正の数です");// }条件が複雑になった場合は、途中結果をbool変数へ分けると読みやすくなります。
int age = 25;bool hasTicket = true;bool canEnter = age >= 18 && hasTicket;
if (canEnter){Console.WriteLine("入場できます");}
6. 繰り返し処理のC# example
6-1. for文のサンプルコード
回数が決まっている繰り返しには、for文が適しています。
for (int i = 1; i <= 5; i++){Console.WriteLine($"{i}回目");}for文のかっこ内は、次の3部分で構成されます。
for (初期化; 継続条件; 更新処理)配列の要素を順番に処理する例は次のとおりです。
string[] fruits = { "りんご", "みかん", "バナナ" };for (int i = 0; i < fruits.Length; i++){Console.WriteLine($"{i}:{fruits[i]}");}
配列のインデックスは0から始まります。
6-2. while文のサンプルコード
while文は、条件が成立している間、処理を繰り返します。
int count = 1;while (count <= 3){Console.WriteLine(count);count++;}
条件が最初からfalseの場合、波かっこの中は一度も実行されません。
更新処理を書き忘れると無限ループになる可能性があります。
int count = 1;while (count <= 3){Console.WriteLine(count);count++;}
6-3. do while文のサンプルコード
do while文は、処理を一度実行してから条件を判定します。
int count = 1;do{Console.WriteLine(count);count++;}while (count <= 3);
最初から条件を満たしていなくても、処理は最低1回実行されます。
int number = 10;do{Console.WriteLine("この処理は1回実行されます");}while (number < 5);
6-4. foreach文のサンプルコード
配列やリストの全要素を順番に処理するときは、foreach文が便利です。
string[] colors = { "赤", "青", "緑" };foreach (string color in colors){Console.WriteLine(color);}
List<T>でも同じように使えます。
List<int> numbers = new() { 10, 20, 30 };foreach (int number in numbers){Console.WriteLine(number);}
インデックス番号が不要で、全要素を処理する場合は、for文よりforeach文のほうが簡潔です。
6-5. breakとcontinueの使い方
breakは、繰り返し処理を途中で終了します。
for (int i = 1; i <= 10; i++){if (i == 5){break;}Console.WriteLine(i);
}
このコードでは、iが5になった時点でループを終了します。
continueは、現在の回だけ残りの処理を飛ばし、次の繰り返しへ進みます。
for (int i = 1; i <= 5; i++){if (i == 3){continue;}Console.WriteLine(i);
}
実行結果には3だけ表示されません。
6-6. ネストしたループのexample
繰り返し処理の中に別の繰り返し処理を書くことを、ループのネストと呼びます。
九九の一部を表示する例は次のとおりです。
for (int i = 1; i <= 3; i++){for (int j = 1; j <= 3; j++){Console.WriteLine($"{i} × {j} = {i * j}");}}表形式で表示することもできます。
for (int row = 1; row <= 3; row++){for (int column = 1; column <= 3; column++){Console.Write($"{row * column}\t");}Console.WriteLine();
}
ネストが深くなるとコードを理解しにくくなります。複雑な処理はメソッドへ分割しましょう。
7. 配列・リスト・コレクションのC# example
7-1. 配列の宣言と初期化のexample
配列は、同じ型の複数の値をまとめて保存する仕組みです。
int[] scores = { 80, 90, 75, 60 };Console.WriteLine(scores.Length);
要素数を指定して作成することもできます。
string[] names = new string[3];names[0] = "田中";names[1] = "佐藤";names[2] = "鈴木";
配列は作成後に要素数を変更できません。
7-2. 配列の要素を取り出すexample
配列の要素は、インデックスを使って取得します。
string[] fruits = { "りんご", "みかん", "ぶどう" };Console.WriteLine(fruits[0]);Console.WriteLine(fruits[1]);Console.WriteLine(fruits[2]);
インデックスは0から始まるため、3個の要素を持つ配列で使用できるインデックスは0、1、2です。
存在しないインデックスへアクセスすると、実行時エラーになります。
string[] fruits = { "りんご", "みかん", "ぶどう" };// 実行時に例外が発生する// Console.WriteLine(fruits[3]);
最後の要素は、^1でも取得できます。
Console.WriteLine(fruits[^1]);7-3. Listの基本的な使い方
List<T>は、要素を追加したり削除したりできるコレクションです。
List<string> names = new();names.Add("田中");names.Add("佐藤");names.Add("鈴木");
foreach (string name in names){Console.WriteLine(name);}
要素を削除するには、Removeを使います。
names.Remove("佐藤");インデックスを指定して削除する場合は、RemoveAtを使います。
names.RemoveAt(0);要素数はCountで取得します。
Console.WriteLine($"人数:{names.Count}");特定の値が含まれているか確認するには、Containsを使います。
if (names.Contains("鈴木")){Console.WriteLine("鈴木さんが登録されています");}7-4. Dictionaryの基本的な使い方
Dictionary<TKey, TValue>は、キーと値を組み合わせて保存するコレクションです。
Dictionary<string, int> prices = new(){{ "りんご", 150 },{ "みかん", 100 },{ "バナナ", 200 }};Console.WriteLine(prices["りんご"]);
要素を追加する例は次のとおりです。
prices["ぶどう"] = 500;キーが存在するか確認してから値を取得するには、TryGetValueが便利です。
if (prices.TryGetValue("みかん", out int price)){Console.WriteLine($"みかんは{price}円です。");}else{Console.WriteLine("商品が見つかりません");}全要素を表示する例は次のとおりです。
foreach (KeyValuePair<string, int> item in prices){Console.WriteLine($"{item.Key}:{item.Value}円");}7-5. LINQでデータを絞り込むexample
LINQを使うと、配列やリストに対する検索、並べ替え、集計を簡潔に記述できます。
偶数だけを取り出す例は次のとおりです。
using System.Linq;List<int> numbers = new() { 1, 2, 3, 4, 5, 6 };
IEnumerable<int> evenNumbers = numbers.Where(number => number % 2 == 0);
foreach (int number in evenNumbers){Console.WriteLine(number);}
大きい順に並べ替える例です。
List<int> scores = new() { 70, 95, 80, 60 };List<int> sortedScores = scores.OrderByDescending(score => score).ToList();
foreach (int score in sortedScores){Console.WriteLine(score);}
合計や平均も求められます。
List<int> scores = new() { 70, 80, 90 };Console.WriteLine($"合計:{scores.Sum()}");Console.WriteLine($"平均:{scores.Average()}");Console.WriteLine($"最大:{scores.Max()}");Console.WriteLine($"最小:{scores.Min()}");
7-6. 配列とListの使い分け
配列とList<T>の主な違いは、要素数を変更できるかどうかです。
配列が適しているケースは次のとおりです。
要素数が最初から決まっている
固定されたデータを扱う
シンプルな構造にしたい
List<T>が適しているケースは次のとおりです。
後から要素を追加する
要素を削除する
要素数が変化する
検索や並べ替えを頻繁に行う
初心者が一般的なアプリを作る場合は、要素数を変更できるList<T>を使う場面が多くなります。
8. メソッドのC# example
8-1. メソッドの定義と呼び出し
メソッドは、複数の処理をまとめて名前を付けたものです。
ShowMessage();static void ShowMessage(){Console.WriteLine("メソッドが呼び出されました");}
ShowMessage();がメソッドの呼び出しです。
同じ処理を複数回呼び出せます。
ShowMessage();ShowMessage();ShowMessage();static void ShowMessage(){Console.WriteLine("こんにちは");}
処理をメソッドへ分割すると、重複を減らし、コードを読みやすくできます。
8-2. 引数を使うメソッドのexample
引数を使うと、呼び出し元からメソッドへ値を渡せます。
Greet("田中");Greet("佐藤");static void Greet(string name){Console.WriteLine($"こんにちは、{name}さん");}
複数の引数を受け取ることもできます。
ShowProfile("鈴木", 30);static void ShowProfile(string name, int age){Console.WriteLine($"名前:{name}");Console.WriteLine($"年齢:{age}");}
メソッド定義側の変数を仮引数、呼び出し時に渡す値を実引数と呼びます。
8-3. 戻り値を返すメソッドのexample
計算結果などを呼び出し元へ返すには、returnを使います。
int result = Add(10, 20);Console.WriteLine(result);static int Add(int a, int b){return a + b;}
static int Addのintは、メソッドが返す値の型です。
文字列を返すメソッドも作れます。
string message = CreateGreeting("高橋");Console.WriteLine(message);static string CreateGreeting(string name){return $"こんにちは、{name}さん";}
8-4. voidメソッドのexample
値を返さないメソッドでは、戻り値の型にvoidを指定します。
PrintSeparator();static void PrintSeparator(){Console.WriteLine("--------------------");}
条件によってメソッドを途中で終了したい場合は、値を伴わないreturnを使えます。
ShowPositiveNumber(-5);static void ShowPositiveNumber(int number){if (number < 0){Console.WriteLine("負の数は表示できません");return;}
Console.WriteLine(number);
}
8-5. オーバーロードのexample
同じ名前で、引数の型や個数が異なるメソッドを定義することをオーバーロードと呼びます。
Console.WriteLine(Add(10, 20));Console.WriteLine(Add(1.5, 2.5));Console.WriteLine(Add(1, 2, 3));static int Add(int a, int b){return a + b;}
static double Add(double a, double b){return a + b;}
static int Add(int a, int b, int c){return a + b + c;}
戻り値の型だけを変えたメソッドは、オーバーロードできません。引数の型、個数、または順序を変える必要があります。
8-6. staticメソッドの基本
staticメソッドは、クラスのインスタンスを作成せずに呼び出せます。
int result = Calculator.Multiply(3, 4);Console.WriteLine(result);static class Calculator{public static int Multiply(int a, int b){return a * b;}}
一方、インスタンスメソッドを呼び出すには、クラスからオブジェクトを作成します。
Greeter greeter = new();greeter.SayHello();class Greeter{public void SayHello(){Console.WriteLine("こんにちは");}}
共通の計算処理や変換処理にはstaticメソッドが向いています。オブジェクトごとの状態を使う処理には、インスタンスメソッドが適しています。
9. クラスとオブジェクト指向のC# example
9-1. クラスの作成サンプルコード
クラスは、データと処理をまとめる設計図です。
class Person{public string Name { get; set; } = "";public void Greet(){Console.WriteLine($"こんにちは、{Name}です。");}
}
このPersonクラスは、名前を保存するNameプロパティと、あいさつを表示するGreetメソッドを持っています。
9-2. インスタンス化のexample
クラスから実際のオブジェクトを作ることを、インスタンス化と呼びます。
Person person = new Person();person.Name = "田中";person.Greet();
class Person{public string Name { get; set; } = "";
public void Greet(){Console.WriteLine($"こんにちは、{Name}です。");}
}
同じクラスから複数のインスタンスを作れます。
Person person1 = new() { Name = "田中" };Person person2 = new() { Name = "佐藤" };person1.Greet();person2.Greet();
各インスタンスは、それぞれ別のデータを持ちます。
9-3. フィールドとプロパティのexample
フィールドは、クラス内でデータを保持する変数です。
class Counter{private int count;public void Increment(){count++;}public void ShowCount(){Console.WriteLine(count);}
}
プロパティは、外部から値を取得または設定するための仕組みです。
class Product{public string Name { get; set; } = "";public int Price { get; set; }}使用例は次のとおりです。
Product product = new(){Name = "キーボード",Price = 5000};Console.WriteLine($"{product.Name}:{product.Price}円");
一般的には、外部へ公開するデータにはプロパティを使用し、内部だけで使う状態には非公開フィールドを使用します。
9-4. コンストラクターのexample
コンストラクターは、インスタンスを作成するときに実行される特別な処理です。
class User{public string Name { get; }public int Age { get; }public User(string name, int age){Name = name;Age = age;}public void ShowProfile(){Console.WriteLine($"{Name}、{Age}歳");}
}
インスタンスを作成するときに値を渡します。
User user = new("山田", 25);user.ShowProfile();コンストラクターを使うと、オブジェクトの作成時に必要な値を必ず設定できます。
9-5. カプセル化のexample
カプセル化とは、内部データを直接変更できないようにし、安全な操作方法だけを外部へ公開する考え方です。
BankAccount account = new(1000);account.Deposit(500);account.Withdraw(300);
Console.WriteLine($"残高:{account.Balance}円");
class BankAccount{public int Balance { get; private set; }
public BankAccount(int initialBalance){if (initialBalance < 0){throw new ArgumentOutOfRangeException(nameof(initialBalance),"初期残高は0以上にしてください。");}Balance = initialBalance;}public void Deposit(int amount){if (amount <= 0){throw new ArgumentOutOfRangeException(nameof(amount),"入金額は1以上にしてください。");}Balance += amount;}public void Withdraw(int amount){if (amount <= 0 || amount > Balance){Console.WriteLine("出金できません");return;}Balance -= amount;}
}
Balanceのsetをprivateにしているため、外部から残高を自由に変更できません。
9-6. 継承のexample
継承を使うと、既存クラスの機能を引き継いだ新しいクラスを作れます。
Dog dog = new();dog.Name = "ポチ";dog.Eat();dog.Bark();class Animal{public string Name { get; set; } = "";
public void Eat(){Console.WriteLine($"{Name}が食事をしています");}
}
class Dog : Animal{public void Bark(){Console.WriteLine($"{Name}が鳴きました");}}
メソッドの動作を派生クラスで変更するには、virtualとoverrideを使用します。
Animal animal = new Dog();animal.Speak();class Animal{public virtual void Speak(){Console.WriteLine("動物が鳴きます");}}
class Dog : Animal{public override void Speak(){Console.WriteLine("ワン");}}
9-7. インターフェイスのexample
インターフェイスは、クラスが実装すべき機能の形を定義します。
IPrintable document = new Document();document.Print();interface IPrintable{void Print();}
class Document : IPrintable{public void Print(){Console.WriteLine("文書を印刷します");}}
複数のクラスで同じインターフェイスを実装できます。
IShape[] shapes ={new Circle(5),new Rectangle(4, 3)};foreach (IShape shape in shapes){Console.WriteLine(shape.GetArea());}
interface IShape{double GetArea();}
class Circle : IShape{private readonly double radius;
public Circle(double radius){this.radius = radius;}public double GetArea(){return Math.PI * radius * radius;}
}
class Rectangle : IShape{private readonly double width;private readonly double height;
public Rectangle(double width, double height){this.width = width;this.height = height;}public double GetArea(){return width * height;}
}
10. 例外処理とデバッグのC# example
10-1. try catchのサンプルコード
例外は、プログラムの実行中に発生する問題を表します。
try catchを使うと、例外が発生したときの処理を記述できます。
try{Console.Write("整数を入力してください:");string? input = Console.ReadLine();int number = int.Parse(input ?? "");Console.WriteLine($"入力値:{number}");
}catch (FormatException){Console.WriteLine("整数として変換できませんでした");}
複数の例外を分けて処理することもできます。
try{int[] numbers = { 10, 20, 30 };Console.Write("インデックスを入力してください:");int index = int.Parse(Console.ReadLine() ?? "");Console.WriteLine(numbers<span data-placeholder-token="true" class="text-token-text-primary cursor-text rounded-sm" style="background-color: color-mix(in srgb, var(--theme-user-selection-bg, var(--selection)) 30%, transparent); padding-top: 4px; padding-bottom: 4px;">[index]</span>);
}catch (FormatException){Console.WriteLine("整数を入力してください");}catch (IndexOutOfRangeException){Console.WriteLine("指定した位置に要素がありません");}
10-2. finallyの使い方
finallyブロックは、例外が発生したかどうかにかかわらず実行されます。
try{Console.WriteLine("処理を開始します");int number = int.Parse("abc");Console.WriteLine(number);
}catch (FormatException){Console.WriteLine("変換に失敗しました");}finally{Console.WriteLine("処理を終了します");}
ファイルやネットワーク接続など、最後に必ず後片付けが必要な処理で使われます。
ただし、ファイル操作ではusing文によって自動的にリソースを解放する方法も一般的です。
10-3. throwで例外を発生させるexample
条件を満たさない値が渡されたときは、throwを使って例外を発生させられます。
try{RegisterAge(-1);}catch (ArgumentOutOfRangeException ex){Console.WriteLine(ex.Message);}static void RegisterAge(int age){if (age < 0){throw new ArgumentOutOfRangeException(nameof(age),"年齢は0以上にしてください。");}
Console.WriteLine($"年齢を{age}歳で登録しました");
}
適切な例外型を選ぶと、問題の原因が分かりやすくなります。
10-4. よくあるコンパイルエラーの読み方
コンパイルエラーが出たら、まず次の情報を確認します。
エラーコード
エラーメッセージ
ファイル名
行番号
列番号
たとえば、セミコロンを書き忘れたコードはコンパイルできません。
// セミコロンがない// Console.WriteLine("こんにちは")変数名のスペルが違う場合もエラーになります。
string message = "こんにちは";// 変数名が一致していない// Console.WriteLine(mesage);
表示された行だけでなく、その直前の行に原因があることもあります。波かっこ、丸かっこ、ダブルクォーテーション、セミコロンが閉じられているか確認しましょう。
10-5. デバッグ実行とブレークポイントの使い方
デバッグは、プログラムを一時停止し、変数の値や処理の流れを確認する作業です。
基本的な手順は次のとおりです。
確認したい行へブレークポイントを設定する
デバッグ実行を開始する
ブレークポイントで処理を停止させる
変数の値を確認する
1行ずつ処理を進める
想定と異なる値になった場所を探す
たとえば、次のコードでtotal += price;の行にブレークポイントを設定すると、各繰り返しでtotalがどのように変化するか確認できます。
int[] prices = { 100, 200, 300 };int total = 0;foreach (int price in prices){total += price;}
Console.WriteLine(total);
エラーが発生していなくても、結果が想定と異なる場合はデバッグが有効です。
11. 実践で使えるC# example集
11-1. 電卓プログラムのサンプルコード
2つの数値と演算子を入力する簡単な電卓です。
Console.Write("1つ目の数値:");if (!double.TryParse(Console.ReadLine(), out double left)){Console.WriteLine("数値を入力してください。");return;}Console.Write("演算子(+、-、*、/):");string? operation = Console.ReadLine();
Console.Write("2つ目の数値:");if (!double.TryParse(Console.ReadLine(), out double right)){Console.WriteLine("数値を入力してください。");return;}
double? result = operation switch{"+" => left + right,"-" => left - right,"*" => left * right,"/" when right != 0 => left / right,_ => null};
if (result.HasValue){Console.WriteLine($"計算結果:{result.Value}");}else if (operation == "/" && right == 0){Console.WriteLine("0では割れません。");}else{Console.WriteLine("使用できない演算子です。");}
このexampleには、標準入力、TryParse、switch式、条件分岐が含まれています。
11-2. 数当てゲームのサンプルコード
1から100までのランダムな数字を当てるゲームです。
Random random = new();int answer = random.Next(1, 101);int count = 0;Console.WriteLine("1から100までの数字を当ててください。");
while (true){Console.Write("予想:");string? input = Console.ReadLine();
if (!int.TryParse(input, out int guess)){Console.WriteLine("整数を入力してください。");continue;}count++;if (guess < answer){Console.WriteLine("もっと大きい数字です。");}else if (guess > answer){Console.WriteLine("もっと小さい数字です。");}else{Console.WriteLine($"正解です。{count}回で当たりました。");break;}
}
慣れてきたら、挑戦回数の上限や難易度選択を追加してみましょう。
11-3. ToDoリストのサンプルコード
タスクの追加、一覧表示、終了ができる簡単なToDoリストです。
List<string> tasks = new();while (true){Console.WriteLine();Console.WriteLine("1:タスクを追加");Console.WriteLine("2:タスクを表示");Console.WriteLine("3:タスクを削除");Console.WriteLine("0:終了");Console.Write("操作を選択:");
string? command = Console.ReadLine();switch (command){case "1":Console.Write("タスク名:");string? task = Console.ReadLine();if (!string.IsNullOrWhiteSpace(task)){tasks.Add(task);Console.WriteLine("追加しました。");}else{Console.WriteLine("タスク名を入力してください。");}break;case "2":if (tasks.Count == 0){Console.WriteLine("タスクはありません。");break;}for (int i = 0; i < tasks.Count; i++){Console.WriteLine($"{i + 1}:{tasks<span data-placeholder-token="true" class="text-token-text-primary cursor-text rounded-sm" style="background-color: color-mix(in srgb, var(--theme-user-selection-bg, var(--selection)) 30%, transparent); padding-top: 4px; padding-bottom: 4px;">[i]</span>}");}break;case "3":Console.Write("削除する番号:");if (int.TryParse(Console.ReadLine(), out int number) &&number >= 1 &&number <= tasks.Count){string removedTask = tasks<span data-placeholder-token="true" class="text-token-text-primary cursor-text rounded-sm" style="background-color: color-mix(in srgb, var(--theme-user-selection-bg, var(--selection)) 30%, transparent); padding-top: 4px; padding-bottom: 4px;">[number - 1]</span>;tasks.RemoveAt(number - 1);Console.WriteLine($"「{removedTask}」を削除しました。");}else{Console.WriteLine("正しい番号を入力してください。");}break;case "0":Console.WriteLine("終了します。");return;default:Console.WriteLine("0から3の番号を選んでください。");break;}
}
次の学習として、タスクをファイルへ保存する機能を追加するとよいでしょう。
11-4. ファイル読み込みのサンプルコード
テキストファイルを一度に読み込むには、File.ReadAllTextを使います。
string path = "sample.txt";if (File.Exists(path)){string content = File.ReadAllText(path);Console.WriteLine(content);}else{Console.WriteLine("ファイルが見つかりません。");}
1行ずつ読み込む場合は、File.ReadAllLinesを使えます。
string path = "sample.txt";if (File.Exists(path)){string[] lines = File.ReadAllLines(path);
foreach (string line in lines){Console.WriteLine(line);}
}
ファイルパスは、実行場所から見た相対パスまたは絶対パスで指定します。
11-5. ファイル書き込みのサンプルコード
文字列をファイルへ書き込むには、File.WriteAllTextを使います。
string path = "message.txt";string content = "C#でファイルを書き込みました。";File.WriteAllText(path, content);
Console.WriteLine("書き込みが完了しました。");
既存ファイルへ追記する場合は、File.AppendAllTextを使います。
string path = "log.txt";string message = $"{DateTime.Now}: プログラムを実行しました{Environment.NewLine}";File.AppendAllText(path, message);
Console.WriteLine("ログを追記しました。");
複数行を書き込む場合は、File.WriteAllLinesを使えます。
string[] lines ={"1行目","2行目","3行目"};File.WriteAllLines("lines.txt", lines);
11-6. 日付と時刻を扱うサンプルコード
現在の日時は、DateTime.Nowで取得できます。
DateTime now = DateTime.Now;Console.WriteLine(now);Console.WriteLine(now.ToString("yyyy年MM月dd日"));Console.WriteLine(now.ToString("HH時mm分ss秒"));
日付を加算する例です。
DateTime today = DateTime.Today;DateTime tomorrow = today.AddDays(1);DateTime nextMonth = today.AddMonths(1);Console.WriteLine($"今日:{today:yyyy/MM/dd}");Console.WriteLine($"明日:{tomorrow:yyyy/MM/dd}");Console.WriteLine($"1か月後:{nextMonth:yyyy/MM/dd}");
日付同士の差は、TimeSpanで取得できます。
DateTime start = new(2026, 1, 1);DateTime end = new(2026, 1, 10);TimeSpan difference = end - start;
Console.WriteLine($"日数差:{difference.Days}日");
日時を世界共通の基準で扱う必要がある場合は、DateTimeOffsetも検討します。
DateTimeOffset current = DateTimeOffset.Now;Console.WriteLine(current);Console.WriteLine(current.ToUniversalTime());
11-7. ランダム値を生成するサンプルコード
乱数を生成するには、Randomクラスを使います。
Random random = new();int number = random.Next(1, 11);Console.WriteLine(number);
Random.Next(1, 11)は、1以上11未満、つまり1から10までの整数を返します。
小数の乱数は、NextDoubleで生成できます。
Random random = new();double value = random.NextDouble();Console.WriteLine(value);
配列からランダムに要素を選ぶ例です。
string[] fortunes ={"大吉","中吉","小吉","吉","凶"};Random random = new();int index = random.Next(fortunes.Length);
Console.WriteLine($"今日の運勢:{fortunes[index]}");
12. C# exampleを理解して応用するコツ
12-1. コピペだけで終わらせない学習方法
C# exampleをコピーして実行するだけでも、最初の一歩としては有効です。しかし、実力を伸ばすには、コードの各行を説明できる状態を目指しましょう。
次の流れで学ぶと効果的です。
サンプルコードをそのまま実行する
実行結果を予想する
各行の役割を確認する
数値や文字列を変更する
一部を削除して変化を見る
コードを見ずに書き直す
別の問題へ応用する
たとえば、1から5まで表示するfor文を学んだら、10から1まで逆順に表示するコードへ改造します。
for (int i = 10; i >= 1; i--){Console.WriteLine(i);}12-2. サンプルコードを改造して理解を深める手順
コードを改造するときは、一度に多くの部分を変更しないことがポイントです。
次の順番で進めましょう。
変数の値を変える
表示する文章を変える
条件式を変える
処理を1つ追加する
メソッドへ分割する
クラスを使った形へ変更する
たとえば、合否判定のexampleへ評価ランクを追加できます。
int score = 75;string result = score switch{>= 90 => "非常に優秀",>= 80 => "優秀",>= 70 => "合格",>= 60 => "再確認が必要",_ => "不合格"};
Console.WriteLine(result);
改造前と改造後の違いを説明できれば、文法を理解できている可能性が高いといえます。
12-3. エラーが出たときの確認ポイント
エラーが出たときは、次の順番で確認します。
エラーメッセージを読む
エラーコードと行番号を確認する
指定された行の前後を見る
セミコロンがあるか確認する
丸かっこや波かっこが閉じているか確認する
変数名のスペルと大文字・小文字を確認する
変数の型が一致しているか確認する
nullの可能性を確認する配列やリストの範囲を確認する
入力値が想定どおりか確認する
問題の場所が分からない場合は、処理の途中にConsole.WriteLineを入れ、変数の値を表示する方法も有効です。
int price = 1000;int quantity = 3;Console.WriteLine($"確認:price={price}");Console.WriteLine($"確認:quantity={quantity}");
int total = price * quantity;
Console.WriteLine($"確認:total={total}");
12-4. 公式ドキュメントで追加例を探す方法
C#の仕様やクラスの使い方を詳しく調べるときは、Microsoft Learnなどの公式ドキュメントが役立ちます。
検索するときは、調べたい機能名を具体的にします。
C# List Add
C# Dictionary TryGetValue
C# File ReadAllText
C# DateTime format
C# LINQ Where
C# async await
C# exception handling
ドキュメントを見るときは、次の項目を確認しましょう。
メソッドの役割
引数の型と意味
戻り値
発生する可能性がある例外
サンプルコード
対応する.NETのバージョン
サンプルをコピーした後は、自分のプロジェクトに合わせて変数名や入力値を変更してください。
12-5. 初心者が次に学ぶべきC#のテーマ
基本文法を理解したら、次のテーマへ進むとよいでしょう。
ラムダ式
LINQ
ジェネリック
列挙型
レコード
非同期処理
asyncとawaitファイルやデータベースへの保存
単体テスト
依存性注入
ASP.NET Core
Entity Framework Core
デスクトップアプリ開発
Unityによるゲーム開発
最初からすべてを理解する必要はありません。作りたいアプリを決め、そのアプリに必要な機能から学ぶと効率的です。
13. csharp exampleに関するよくある質問
13-1. C#と.NETの違いは何ですか?
C#はプログラミング言語です。一方、.NETは、C#などで作成したアプリを開発・実行するためのプラットフォームです。
関係を簡単に整理すると、次のようになります。
C#:プログラムを書くための言語
.NET SDK:アプリを作成、ビルド、実行するための開発ツール
.NETランタイム:作成したアプリを実行するための環境
クラスライブラリ:文字列、ファイル、ネットワークなどを扱う機能群
C#を学ぶときは、通常.NETも一緒に利用します。
13-2. C#は初心者でも学びやすいですか?
C#は、初心者でも学習しやすい言語の一つです。
変数やメソッドの型が明確で、開発環境による入力補完やエラー表示も充実しています。また、基本文法からオブジェクト指向まで段階的に学べます。
一方で、クラス、継承、非同期処理、ジェネリックなど、学習が進むと難しい概念も登場します。最初はコンソールアプリで小さなexampleを実行し、少しずつ範囲を広げることが大切です。
13-3. C#のサンプルコードはどこで実行できますか?
C#のサンプルコードは、主に次の環境で実行できます。
Visual Studio
Visual Studio Codeと.NET SDK
C#対応のオンライン実行環境
コマンドラインと.NET CLI
継続的に学ぶ場合は、Visual StudioまたはVisual Studio Codeと.NET SDKの組み合わせが適しています。
インストールせずに短いコードだけを試したい場合は、オンライン実行環境が便利です。
13-4. csharp exampleとC# sample codeは同じ意味ですか?
ほぼ同じ意味です。
exampleは「使用例」や「実例」、sample codeは「見本となるコード」という意味で使われます。
検索結果には多少の違いが出ることがあります。
csharp example:短い構文例や機能別の使用例C# sample code:完成度の高いサンプルやプログラム例C# tutorial:手順に沿った学習記事C# documentation:仕様やAPIの詳しい説明
目的に応じてキーワードを組み合わせると、必要な情報を見つけやすくなります。
13-5. C#でWebアプリやゲーム開発はできますか?
C#では、Webアプリもゲームも開発できます。
Webアプリ開発では、ASP.NET Coreが広く利用されています。Web API、管理画面、会員サイト、業務システムなどを作成できます。
ゲーム開発では、C#をスクリプト言語として利用するゲームエンジンがあります。キャラクター操作、当たり判定、スコア管理、画面遷移などをC#で実装できます。
そのほかにも、C#は次の分野で使われます。
コンソールアプリ
Windowsデスクトップアプリ
Web API
クラウドサービス
モバイルアプリ
バッチ処理
テスト自動化
業務システム
基本文法はどの分野でも共通するため、最初にコンソールアプリで学んだ知識を別の開発分野へ応用できます。
まとめ
「csharp example」と検索してC#を学ぶときは、短いサンプルコードを実際に動かすことが重要です。
まずは、次の基本項目を順番に身につけましょう。
Console.WriteLineによる出力変数とデータ型
文字列補間
数値計算
ifやswitchによる条件分岐forやforeachによる繰り返し配列、List、Dictionary
メソッド
クラスとオブジェクト
例外処理
ファイル操作
サンプルコードが動いたら、数値、文字列、条件式を変更し、結果がどう変化するか確認してください。次に、複数のexampleを組み合わせて、電卓、数当てゲーム、ToDoリストなどの小さなアプリを作ります。
C#は、基本構文を一度に暗記するより、コードを書き、実行し、エラーを直す経験を積むことで身につきます。小さなプログラムを完成させることを繰り返しながら、Webアプリ、ゲーム、業務システムなど、自分が作りたい分野へ学習を広げていきましょう。

