Skip to content

第9章 クラスを使いこなそう

この章では、.NETに用意されている便利なクラスや構造体を利用し、C#の標準機能を使いこなす練習をします。

第7章では、自分で Employee クラスや Sale クラスを作成しました。

第8章では、DateTime.NowMath.Max、静的クラスなどを通じて、クラス名から直接呼び出せる機能について学習しました。

この章では、C#や.NETがあらかじめ用意している代表的な機能を使います。

名前空間
Stringクラス
Mathクラス
DateTime構造体
Fileクラス

実際の開発では、自分でクラスを作るだけでなく、.NETが用意しているクラスを調べて使う力も重要です。

たとえば、次のような処理は自分で一から作る必要はありません。

文字列の長さを調べる
文字列に特定の文字が含まれるか調べる
小数を四捨五入する
大きい値・小さい値を求める
現在の日付を取得する
日付を指定した形式で表示する
テキストファイルを書き込む
テキストファイルを読み込む

これらは、.NETが用意しているクラスやメソッドを利用することで実現できます。


この章でできるようになること

Section titled “この章でできるようになること”

この章を終えると、次のことができるようになります。

  • 名前空間の役割をおおまかに説明できる
  • using ディレクティブの役割を説明できる
  • 同じクラス名でも名前空間が違えば区別できることを説明できる
  • string の代表的なプロパティやメソッドを使える
  • LengthContainsReplaceSubstring などを使える
  • Math クラスの代表的な静的メソッドを使える
  • Math.RoundMath.MaxMath.MinMath.Abs を使える
  • DateTime 構造体で日付や時刻を扱える
  • DateTime.NowDateTime.TodayAddDays などを使える
  • 日付を指定した形式の文字列に変換できる
  • File クラスを使ってテキストファイルを書き込める
  • File クラスを使ってテキストファイルを読み込める
  • 標準クラスを調べながら使う姿勢を身に付ける

項目内容
開発環境Visual Studio 2022
プロジェクト種類コンソール アプリ
対象フレームワーク.NET 8
プロジェクト名Chapter09_UsefulClasses

作業を始める前に、次の内容を確認してください。

  • Visual Studio 2022でコンソールアプリを作成できる
  • .NET 8.0 を選択できる
  • using System; の役割をおおまかに説明できる
  • プロパティとメソッドの違いをおおまかに説明できる
  • 静的メソッドとインスタンスメソッドの違いをおおまかに説明できる
  • 文字列補間を使って表示できる
  • 第8章の内容をGitに提出済みである

名前空間とは、クラスを分類するための入れ物です。

C#では、多くのクラスが名前空間の中に分類されています。

たとえば、これまで何度も使ってきた Console クラスは、System 名前空間に含まれています。

System.Console.WriteLine("こんにちは");

しかし、毎回 System.Console.WriteLine と書くのは長くなります。

そこで、先頭に次のように書きます。

using System;

すると、次のように短く書けます。

Console.WriteLine("こんにちは");

using ディレクティブは、名前空間を省略して書けるようにするための記述です。

using System;

これは、次のように考えるとよいです。

System名前空間にあるクラスを使いやすくする

using System; があるため、次のように短く書けます。

Console.WriteLine("C#研修");
DateTime now = DateTime.Now;

名前空間を指定してクラスを作る

Section titled “名前空間を指定してクラスを作る”

自分で作るクラスも、名前空間の中に入れることができます。

using System;
namespace Chapter09_UsefulClasses
{
class Program
{
static void Main()
{
Employee employee = new Employee
{
EmployeeId = 1001,
Name = "山田太郎"
};
Console.WriteLine(employee.Name);
}
}
class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
}
}

この例では、Program クラスと Employee クラスが、Chapter09_UsefulClasses という名前空間に含まれています。


同じ名前のクラスでも、名前空間が違えば別のクラスとして扱えます。

たとえば、次のように考えることができます。

Sales.Employee
→ 営業システム用のEmployeeクラス
Training.Employee
→ 研修用のEmployeeクラス

どちらも Employee という名前ですが、名前空間が異なるため区別できます。


名前空間を含めたクラス名を、完全修飾名と呼ぶことがあります。

たとえば、Console クラスを完全に書くと次のようになります。

System.Console.WriteLine("こんにちは");

通常は using System; を書いて、短く次のように使います。

Console.WriteLine("こんにちは");

Visual Studioでクラスを追加したときの注意

Section titled “Visual Studioでクラスを追加したときの注意”

Visual Studioで新しいクラスファイルを追加すると、名前空間が自動で付く場合があります。

例:

namespace Chapter09_UsefulClasses
{
class Employee
{
}
}

また、環境によっては次のような形式になることもあります。

namespace Chapter09_UsefulClasses;
class Employee
{
}

これは ファイルスコープ名前空間 と呼ばれる書き方です。

本研修では、最初は構造が分かりやすいように、次の形式を基本にします。

namespace Chapter09_UsefulClasses
{
class Employee
{
}
}

補足

どちらの書き方もC#の正しい書き方です。 研修では、クラスのまとまりを視覚的に理解しやすくするため、 { } を使った名前空間の書き方を中心に説明します。


これまで、文字列を扱うために string 型を使ってきました。

string name = "山田太郎";

string は、文字列を扱うための型です。

C#では string と書くことが多いですが、内部的には String クラスと関係があります。

この章では細かい違いは気にせず、次のように考えてください。

stringは文字列を扱うための型
文字列には便利なプロパティやメソッドがある

文字列の長さを調べるには、Length プロパティを使います。

using System;
class Program
{
static void Main()
{
string employeeName = "山田太郎";
Console.WriteLine($"氏名:{employeeName}");
Console.WriteLine($"文字数:{employeeName.Length}");
}
}

実行結果:

氏名:山田太郎
文字数:4

Length は、文字列が持っている文字数という情報を取得するプロパティです。

employeeName.Length

プロパティなので、() は付けません。


文字列に特定の文字や単語が含まれているかを調べるには、Contains メソッドを使います。

using System;
class Program
{
static void Main()
{
string email = "yamada@example.com";
bool containsAtMark = email.Contains("@");
if (containsAtMark)
{
Console.WriteLine("@が含まれています。");
}
else
{
Console.WriteLine("@が含まれていません。");
}
}
}

実行結果:

@が含まれています。

Contains は、指定した文字列が含まれているかを調べ、true または false を返します。

email.Contains("@")

メソッドなので、() が付きます。


文字列の一部を置き換えるには、Replace メソッドを使います。

using System;
class Program
{
static void Main()
{
string message = "C#を勉強しています。";
string replacedMessage = message.Replace("勉強", "学習");
Console.WriteLine(message);
Console.WriteLine(replacedMessage);
}
}

実行結果:

C#を勉強しています。
C#を学習しています。

Replace は、元の文字列を直接変更するのではなく、置き換え後の新しい文字列を返します。


文字列の一部を取り出すには、Substring メソッドを使います。

using System;
class Program
{
static void Main()
{
string employeeCode = "EMP1001";
string prefix = employeeCode.Substring(0, 3);
string number = employeeCode.Substring(3);
Console.WriteLine($"接頭辞:{prefix}");
Console.WriteLine($"番号:{number}");
}
}

実行結果:

接頭辞:EMP
番号:1001

Substring(0, 3) は、0番目から3文字分を取り出します。

E M P 1 0 0 1
0 1 2 3 4 5 6

Substring(3) は、3番目から最後までを取り出します。


英字を大文字・小文字に変換するには、ToUpperToLower を使います。

using System;
class Program
{
static void Main()
{
string command = "Search";
Console.WriteLine(command.ToUpper());
Console.WriteLine(command.ToLower());
}
}

実行結果:

SEARCH
search

入力されたコマンドを小文字に統一してから判定したい場合などに使えます。

string command = Console.ReadLine();
command = command.ToLower();

文字列の前後にある空白を取り除くには、Trim メソッドを使います。

using System;
class Program
{
static void Main()
{
string input = " yamada ";
string trimmed = input.Trim();
Console.WriteLine($"[{input}]");
Console.WriteLine($"[{trimmed}]");
}
}

実行結果:

[ yamada ]
[yamada]

Trim は、入力値の前後に余計な空白が入ってしまう場合に便利です。


文字列処理の業務アプリでの利用例

Section titled “文字列処理の業務アプリでの利用例”

業務アプリでは、文字列処理は多くの場面で使われます。

メールアドレスに @ が含まれているか確認する
社員コードの先頭3文字を取り出す
入力されたコマンドを小文字に統一する
前後の余分な空白を削除する
特定の文字を置き換える

この章では、まず代表的な文字列処理を覚えましょう。


エラーになる例:存在しない位置をSubstringで取り出す

Section titled “エラーになる例:存在しない位置をSubstringで取り出す”

次のコードは実行時にエラーになります。

string code = "EMP";
string number = code.Substring(3, 4);

code の長さは3文字です。

インデックスは 012 までしかありません。

存在しない範囲を取り出そうとするとエラーになります。

注意

Substring を使うときは、文字列の長さと取り出す位置に注意してください。


Math クラスは、数値計算に関する便利な静的メソッドを持つクラスです。

第8章でも、Math.MaxMath.Min を使いました。

int max = Math.Max(10, 20);
int min = Math.Min(10, 20);

Math クラスのメソッドは、基本的にクラス名から直接呼び出します。

Math.メソッド名(...)

Math.Max は大きい値、Math.Min は小さい値を返します。

using System;
class Program
{
static void Main()
{
int score1 = 82;
int score2 = 95;
int higherScore = Math.Max(score1, score2);
int lowerScore = Math.Min(score1, score2);
Console.WriteLine($"高い点数:{higherScore}");
Console.WriteLine($"低い点数:{lowerScore}");
}
}

実行結果:

高い点数:95
低い点数:82

Math.Abs は、絶対値を求めます。

絶対値とは、符号を取り除いた値です。

using System;
class Program
{
static void Main()
{
int difference = -15;
int absoluteValue = Math.Abs(difference);
Console.WriteLine($"差分:{difference}");
Console.WriteLine($"絶対値:{absoluteValue}");
}
}

実行結果:

差分:-15
絶対値:15

たとえば、予定値と実績値の差を扱うときに、差の大きさだけを知りたい場合があります。


Math.Round は、小数を丸めます。

using System;
class Program
{
static void Main()
{
double average = 82.6666667;
double rounded = Math.Round(average, 1);
Console.WriteLine($"平均点:{average}");
Console.WriteLine($"丸めた平均点:{rounded}");
}
}

実行結果:

平均点:82.6666667
丸めた平均点:82.7

Math.Round(average, 1) は、小数第1位までに丸めます。


Math.Ceiling は切り上げ、Math.Floor は切り捨てを行います。

using System;
class Program
{
static void Main()
{
double value = 12.3;
Console.WriteLine(Math.Ceiling(value));
Console.WriteLine(Math.Floor(value));
}
}

実行結果:

13
12
メソッド意味
Math.Ceiling切り上げ
Math.Floor切り捨て
Math.Round丸め

Math.Pow は、累乗を求めます。

using System;
class Program
{
static void Main()
{
double result = Math.Pow(2, 3);
Console.WriteLine(result);
}
}

実行結果:

8

Math.Pow(2, 3) は、2の3乗を表します。

2 × 2 × 2 = 8

Mathクラスの利用例:平均点を丸める

Section titled “Mathクラスの利用例:平均点を丸める”

次のコードでは、配列の平均点を求め、小数第1位までに丸めます。

using System;
class Program
{
static void Main()
{
int[] scores = { 80, 75, 90, 68, 85 };
int total = 0;
foreach (int score in scores)
{
total += score;
}
double average = (double)total / scores.Length;
double roundedAverage = Math.Round(average, 1);
Console.WriteLine($"平均点:{average}");
Console.WriteLine($"表示用平均点:{roundedAverage}");
}
}

実行結果:

平均点:79.6
表示用平均点:79.6

DateTime は、日付や時刻を扱うための型です。

現在日時を取得するには、DateTime.Now を使います。

using System;
class Program
{
static void Main()
{
DateTime now = DateTime.Now;
Console.WriteLine(now);
}
}

実行結果例:

2026/05/18 10:30:00

実行結果は、実行した日時によって変わります。


今日の日付だけを扱いたい場合は、DateTime.Today を使います。

using System;
class Program
{
static void Main()
{
DateTime today = DateTime.Today;
Console.WriteLine(today);
}
}

DateTime.Today は日付を表します。
時刻部分は通常 00:00:00 になります。


DateTime 型の値から、年、月、日を取り出せます。

using System;
class Program
{
static void Main()
{
DateTime today = DateTime.Today;
Console.WriteLine($"年:{today.Year}");
Console.WriteLine($"月:{today.Month}");
Console.WriteLine($"日:{today.Day}");
}
}

実行結果例:

年:2026
月:5
日:18

YearMonthDay はプロパティです。


特定の日付を作成するには、new DateTime を使います。

using System;
class Program
{
static void Main()
{
DateTime trainingStartDate = new DateTime(2026, 5, 18);
Console.WriteLine(trainingStartDate);
}
}

new DateTime(2026, 5, 18) は、2026年5月18日を表す日付を作成しています。


指定日から何日後かを求めるには、AddDays を使います。

using System;
class Program
{
static void Main()
{
DateTime trainingStartDate = new DateTime(2026, 5, 18);
DateTime afterSevenDays = trainingStartDate.AddDays(7);
Console.WriteLine($"開始日:{trainingStartDate}");
Console.WriteLine($"7日後:{afterSevenDays}");
}
}

AddDays(7) は、7日後の日付を返します。


2つの日付の差を求めることもできます。

using System;
class Program
{
static void Main()
{
DateTime startDate = new DateTime(2026, 5, 18);
DateTime endDate = new DateTime(2026, 6, 12);
TimeSpan period = endDate - startDate;
Console.WriteLine($"日数:{period.Days}");
}
}

TimeSpan は、時間の長さを表す型です。

この例では、period.Days で日数を取得しています。


ToStringで日付の表示形式を指定する

Section titled “ToStringで日付の表示形式を指定する”

DateTime の値は、ToString を使って表示形式を指定できます。

using System;
class Program
{
static void Main()
{
DateTime date = new DateTime(2026, 5, 18, 9, 30, 0);
Console.WriteLine(date.ToString("yyyy/MM/dd"));
Console.WriteLine(date.ToString("yyyy年MM月dd日"));
Console.WriteLine(date.ToString("yyyy/MM/dd HH:mm"));
}
}

実行結果:

2026/05/18
2026年05月18日
2026/05/18 09:30

書式表示例意味
yyyy2026西暦4桁
MM05月2桁
M5
dd18日2桁
d18
HH09時2桁
mm30分2桁

日付の表示形式は、業務アプリでもよく使います。

画面表示用の日付
帳票出力用の日付
ファイル名に含める日付
ログ出力用の日付

日付を文字列に変換して、ファイル名の一部として使うこともできます。

using System;
class Program
{
static void Main()
{
DateTime today = DateTime.Today;
string fileName = $"sales_{today.ToString("yyyyMMdd")}.txt";
Console.WriteLine(fileName);
}
}

実行結果例:

sales_20260518.txt

yyyyMMdd のように書くと、ファイル名に使いやすい日付文字列を作成できます。


File クラスは、ファイルの読み書きに使うクラスです。

テキストファイルを作成したり、読み込んだりできます。

File クラスは、System.IO 名前空間に含まれています。

そのため、ファイル操作を行う場合は、先頭に次の using を追加します。

using System.IO;

次のコードでは、社員名の一覧をテキストファイルに書き込みます。

using System;
using System.IO;
class Program
{
static void Main()
{
string[] employeeNames =
{
"山田太郎",
"佐藤花子",
"鈴木一郎"
};
File.WriteAllLines("employee_names.txt", employeeNames);
Console.WriteLine("ファイルを書き込みました。");
}
}

実行結果:

ファイルを書き込みました。

このコードを実行すると、employee_names.txt というファイルが作成されます。


File.WriteAllLines("employee_names.txt", employeeNames); のようにファイル名だけを指定した場合、ファイルはプログラムの実行場所に作成されます。

Visual Studioから実行した場合、プロジェクトフォルダではなく、bin フォルダ配下に作成されることがあります。

ファイルが見つからない場合は、ソリューションエクスプローラーやエクスプローラーで検索してください。

注意

研修では、最初はファイル名だけを指定する簡単な方法で試します。 実務では、保存先フォルダやファイルパスを明確に指定することが多いです。


先ほど作成した employee_names.txt を読み込みます。

using System;
using System.IO;
class Program
{
static void Main()
{
string[] lines = File.ReadAllLines("employee_names.txt");
foreach (string line in lines)
{
Console.WriteLine(line);
}
}
}

実行結果:

山田太郎
佐藤花子
鈴木一郎

File.ReadAllLines は、テキストファイルのすべての行を読み込み、string[] として返します。


ファイルが存在しない状態で File.ReadAllLines を実行すると、エラーになります。

そこで、読み込む前にファイルが存在するか確認できます。

using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = "employee_names.txt";
if (File.Exists(filePath))
{
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
Console.WriteLine(line);
}
}
else
{
Console.WriteLine("ファイルが見つかりません。");
}
}
}

File.Exists は、指定したファイルが存在するかを調べ、true または false を返します。


複数行ではなく、1つの文字列を書き込む場合は File.WriteAllText を使えます。

using System;
using System.IO;
class Program
{
static void Main()
{
string text = "C#研修のメモです。";
File.WriteAllText("memo.txt", text);
Console.WriteLine("メモを書き込みました。");
}
}

File.ReadAllText を使うと、ファイル全体を1つの文字列として読み込めます。

using System;
using System.IO;
class Program
{
static void Main()
{
string text = File.ReadAllText("memo.txt");
Console.WriteLine(text);
}
}

既存のファイルに内容を追加する場合は、File.AppendAllText を使います。

using System;
using System.IO;
class Program
{
static void Main()
{
string logText = $"{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")} アプリを実行しました。";
File.AppendAllText("app.log", logText + Environment.NewLine);
Console.WriteLine("ログを追記しました。");
}
}

Environment.NewLine は、改行を表します。


ファイル操作では、次のような問題が起きることがあります。

ファイルが存在しない
保存先フォルダが存在しない
同じ名前のファイルを上書きしてしまう
ファイルを開く権限がない
他のアプリがファイルを使用中

この章では、まず基本的な読み書きを学習します。
ファイル操作で発生するエラーへの対応は、後の例外処理の章で扱います。


この章でよくあるつまずきを確認します。

つまずき原因対応
ConsoleFile が見つからない必要な using がないusing System;using System.IO; を確認する
名前空間の意味が分からないクラスの分類という考え方に慣れていない名前空間はクラスの住所のようなものと考える
Length() と書いてしまうプロパティとメソッドを混同しているLength はプロパティなので () を付けない
Contains() を付け忘れるメソッド呼び出しに慣れていないメソッドには () を付ける
Substring でエラーになる存在しない位置を指定している文字列の長さとインデックスを確認する
DateTime.Now() と書いてしまう静的プロパティと静的メソッドを混同しているDateTime.Now はプロパティ
日付の表示形式が思った通りにならない書式文字列を間違えているyyyyMMdd の意味を確認する
ファイルが見つからない実行フォルダが想定と違うファイルの作成場所を確認する
File.ReadAllLines でエラーになるファイルが存在しないFile.Exists で確認する
ファイルが文字化けする文字コードや環境の違いこの章では基本操作を優先し、必要に応じて講師に確認する

次の項目について、自分で説明できるか確認してください。

  • 名前空間とは何かをおおまかに説明できる
  • using ディレクティブの役割を説明できる
  • 完全修飾名とは何かをおおまかに説明できる
  • string.Length を使って文字数を取得できる
  • Contains を使って文字列に指定文字が含まれるか確認できる
  • Replace を使って文字列を置き換えられる
  • Substring を使って文字列の一部を取り出せる
  • Trim を使って前後の空白を取り除ける
  • Math.MaxMath.MinMath.Round を使える
  • DateTime.NowDateTime.Today を使える
  • DateTime から年、月、日を取り出せる
  • AddDays で日付を加算できる
  • ToString で日付の表示形式を指定できる
  • File.WriteAllLines でファイルを書き込める
  • File.ReadAllLines でファイルを読み込める
  • File.Exists でファイルの存在を確認できる

研修の進め方によっては、隣の人またはチーム内で説明確認を行います。

次の内容を、自分の言葉で説明してください。

  1. 名前空間は何のためにありますか。
  2. using System; は何をするための記述ですか。
  3. LengthContains() の書き方の違いは何ですか。
  4. Math.Round(82.666, 1) は何をしますか。
  5. DateTime.NowDateTime.Today の違いは何ですか。
  6. File.WriteAllLinesFile.ReadAllLines は、それぞれ何をするメソッドですか。
  7. ファイルを読み込む前に File.Exists を使う理由は何ですか。

説明するときは、完全な答えでなくても構いません。
自分の言葉で説明しようとすることが大切です。


この章の演習課題に取り組みます。

制限時間は 70分 です。

時間内にすべて完成しなくても構いません。
できたところまでを保存し、Gitに提出してください。

提出について

制限時間になったら、完成・未完成に関わらず作業を止めます。 できたところまでをGitにcommitし、pushしてください。 未完成の場合は、どこまでできたかを報告できるようにしておきましょう。


まずは、全員が必須課題に取り組んでください。


課題9-1 文字列の長さを調べる

Section titled “課題9-1 文字列の長さを調べる”

社員名を変数に代入し、文字数を表示してください。

実行結果例:

氏名:山田太郎
文字数:4

条件:

  • string 型の変数を使う
  • Length プロパティを使う
  • 文字列補間を使って表示する

課題9-2 メールアドレスを確認する

Section titled “課題9-2 メールアドレスを確認する”

メールアドレスに @ が含まれているかを判定してください。

実行例:

メールアドレスを入力してください。
yamada@example.com
@が含まれています。

条件:

  • Console.ReadLine を使う
  • Contains メソッドを使う
  • if 文を使う

次の点数配列から平均点を求め、小数第1位までに丸めて表示してください。

80, 75, 90, 68, 85

実行結果例:

平均点:79.6
表示用平均点:79.6

条件:

  • 配列を使う
  • foreach または for 文で合計を求める
  • Math.Round を使う

課題9-4 今日の日付を表示する

Section titled “課題9-4 今日の日付を表示する”

今日の日付を次の形式で表示してください。

2026年05月18日

条件:

  • DateTime.Today を使う
  • ToString("yyyy年MM月dd日") を使う

課題9-5 社員名一覧をファイルに書き込む

Section titled “課題9-5 社員名一覧をファイルに書き込む”

次の社員名を employee_names.txt に書き込んでください。

山田太郎
佐藤花子
鈴木一郎

条件:

  • using System.IO; を書く
  • string[] を使う
  • File.WriteAllLines を使う
  • 実行後、ファイルが作成されていることを確認する

必須課題が終わった人は、発展課題に取り組んでください。


課題9-6 社員コードを分解する

Section titled “課題9-6 社員コードを分解する”

社員コード EMP1001 を、接頭辞と番号に分けて表示してください。

実行結果例:

社員コード:EMP1001
接頭辞:EMP
番号:1001

条件:

  • Substring を使う
  • 接頭辞は先頭3文字とする
  • 番号は4文字目以降とする

課題9-7 入力コマンドを小文字に統一する

Section titled “課題9-7 入力コマンドを小文字に統一する”

コマンドを入力し、小文字に変換してから判定してください。

コマンド表示
add登録処理を行います
list一覧表示を行います
exit終了します
それ以外不明なコマンドです

実行例:

コマンドを入力してください。
ADD
登録処理を行います

条件:

  • Console.ReadLine を使う
  • ToLower を使う
  • switch 文を使う

課題9-8 日付から研修終了予定日を求める

Section titled “課題9-8 日付から研修終了予定日を求める”

研修開始日を 2026年5月18日 とし、27日後の日付を表示してください。

実行結果例:

開始日:2026/05/18
終了予定日:2026/06/14

条件:

  • new DateTime(2026, 5, 18) を使う
  • AddDays を使う
  • ToString("yyyy/MM/dd") を使う

課題9-9 ファイルを読み込んで表示する

Section titled “課題9-9 ファイルを読み込んで表示する”

課題9-5で作成した employee_names.txt を読み込み、すべての行を表示してください。

実行結果例:

山田太郎
佐藤花子
鈴木一郎

条件:

  • File.Exists でファイルの存在を確認する
  • ファイルが存在する場合は File.ReadAllLines で読み込む
  • foreach 文で表示する
  • ファイルが存在しない場合は「ファイルが見つかりません」と表示する

プログラムを実行した日時を app.log に追記してください。

実行結果例:

ログを追記しました。

app.log の内容例:

2026/05/18 09:30:00 アプリを実行しました。
2026/05/18 09:35:12 アプリを実行しました。

条件:

  • DateTime.Now を使う
  • ToString("yyyy/MM/dd HH:mm:ss") を使う
  • File.AppendAllText を使う
  • 改行には Environment.NewLine を使う

入力されたメモを memo.txt に保存してください。

実行例:

メモを入力してください。
会議資料を確認する
メモを保存しました。

条件:

  • Console.ReadLine を使う
  • File.WriteAllText を使う
  • 保存後、File.ReadAllText で読み込み、保存内容を表示する

課題が終わったら、できたところまでをGitに提出します。

まず、現在の状態を確認します。

Terminal window
git status

変更されたファイルを追加します。

Terminal window
git add .

コミットします。

Terminal window
git commit -m "Chapter09 クラスを使いこなそう"

ファイルサーバー上のリポジトリへpushします。

Terminal window
git push

Gitの操作でエラーが出た場合は、自己判断で同じ操作を繰り返さず、講師に確認してください。

注意

ファイル出力を行う課題では、作成された .txt.log ファイルもGitの対象になる場合があります。 提出対象に含めるかどうかは、研修の指示に従ってください。


提出前に、次の項目を確認してください。

  • プログラムをVisual Studioから実行できる
  • 必要な using を書いている
  • String 関連のプロパティやメソッドを使えている
  • Length() を付けていない
  • ContainsReplaceSubstring などのメソッドに () を付けている
  • Math クラスの静的メソッドを使えている
  • DateTime で日付を扱えている
  • 日付を指定した形式で表示できている
  • File.WriteAllLines または File.WriteAllText でファイルを書き込めている
  • File.ReadAllLines または File.ReadAllText でファイルを読み込めている
  • ファイルが存在しない場合の処理を考慮している
  • インデントが整っている
  • Gitにcommitしている
  • Gitにpushしている

この章では、.NETに用意されている代表的なクラスや構造体を利用しました。

この章で学んだ主な内容は次の通りです。

  • 名前空間は、クラスを分類するための入れ物である
  • using ディレクティブを使うと、名前空間の指定を省略できる
  • string には、文字列を扱うための便利なプロパティやメソッドがある
  • Length は文字数を取得するプロパティである
  • ContainsReplaceSubstringTrim などは文字列を扱うメソッドである
  • Math クラスには、数値計算に便利な静的メソッドがある
  • DateTime は、日付や時刻を扱うための型である
  • DateTime.NowDateTime.Today で日時や日付を取得できる
  • ToString を使うと、日付の表示形式を指定できる
  • File クラスを使うと、テキストファイルの読み書きができる
  • ファイル操作では、ファイルの存在や保存場所に注意する必要がある

次章では、クラスについてさらに掘り下げます

メソッドの戻り値、メソッドのオーバーロード、省略可能な引数、コンストラクター、プロパティの使い方などを学び、クラスをより実践的に使えるようにしていきます。