第8章 静的メソッド/静的プロパティ/静的クラス
この章の目的
Section titled “この章の目的”この章では、static キーワードを使った 静的メソッド、静的プロパティ、静的クラス について学習します。
第7章では、Employee クラスを作成し、new を使ってオブジェクトを作成しました。
Employee employee = new Employee();employee.Name = "山田太郎";employee.PrintProfile();このように、オブジェクトを作成してから使うプロパティやメソッドを、インスタンスプロパティ、インスタンスメソッドと呼びます。
一方で、これまでの章でも、オブジェクトを作成せずに使ってきたものがあります。
Console.WriteLine("こんにちは");int number = int.Parse("123");Console.WriteLine や int.Parse は、new Console() や new int() のようにオブジェクトを作ってから呼び出していません。
このように、クラス名から直接呼び出せるメンバーを 静的メンバー と呼びます。
この章では、次の違いを整理します。
オブジェクトを作ってから使うもの → インスタンスプロパティ、インスタンスメソッド
クラス名から直接使うもの → 静的プロパティ、静的メソッドこの章でできるようになること
Section titled “この章でできるようになること”この章を終えると、次のことができるようになります。
staticの基本的な意味を説明できる- インスタンスプロパティと静的プロパティの違いを説明できる
- インスタンスメソッドと静的メソッドの違いを説明できる
DateTime.NowやDateTime.Todayのような静的プロパティを使えるDateTime.IsLeapYearやMath.Maxのような静的メソッドを使える- 自分で静的メソッドを定義できる
- 自分で静的プロパティを定義できる
- 静的クラスを作成できる
- 共通処理を静的クラスにまとめる考え方を理解できる
- 静的メソッドからインスタンスプロパティを直接使えない理由をおおまかに説明できる
本章で使用する環境
Section titled “本章で使用する環境”| 項目 | 内容 |
|---|---|
| 開発環境 | Visual Studio 2022 |
| プロジェクト種類 | コンソール アプリ |
| 対象フレームワーク | .NET 8 |
| プロジェクト名 | Chapter08_StaticMembers |
作業前チェック
Section titled “作業前チェック”作業を始める前に、次の内容を確認してください。
- Visual Studio 2022でコンソールアプリを作成できる
-
.NET 8.0を選択できる - クラスを作成できる
- プロパティを定義できる
- メソッドを定義できる
-
newを使ってオブジェクトを作成できる - 第7章の内容をGitに提出済みである
8-1 staticとは何なのだろう?
Section titled “8-1 staticとは何なのだろう?”オブジェクトを作って使う場合
Section titled “オブジェクトを作って使う場合”第7章では、次のように Employee オブジェクトを作成してから、プロパティやメソッドを使いました。
using System;
class Program{ static void Main() { Employee employee = new Employee { EmployeeId = 1001, Name = "山田太郎", Department = "営業部" };
employee.PrintProfile(); }}
class Employee{ public int EmployeeId { get; set; } public string Name { get; set; } public string Department { get; set; }
public void PrintProfile() { Console.WriteLine($"社員番号:{EmployeeId}"); Console.WriteLine($"氏名:{Name}"); Console.WriteLine($"部署:{Department}"); }}この場合、employee というオブジェクトを作成してから、次のようにメソッドを呼び出しています。
employee.PrintProfile();これは、employee オブジェクトに対して処理を実行しているイメージです。
オブジェクトを作らずに使ってきたもの
Section titled “オブジェクトを作らずに使ってきたもの”一方で、これまで何度も使ってきた次のコードを見てください。
Console.WriteLine("こんにちは");このコードでは、次のようには書いていません。
Console console = new Console();console.WriteLine("こんにちは");Console.WriteLine は、Console というクラス名から直接呼び出しています。
同じように、文字列を整数に変換するときも、次のように書いてきました。
int number = int.Parse("123");これも、int 型に用意されている Parse メソッドを、型名から直接呼び出しています。
staticは「クラスそのものに属する」
Section titled “staticは「クラスそのものに属する」”static が付いたメンバーは、オブジェクトではなく クラスそのものに属する と考えます。
| 種類 | 使い方 | 例 |
|---|---|---|
| インスタンスメンバー | オブジェクトを作ってから使う | employee.PrintProfile() |
| 静的メンバー | クラス名から直接使う | Console.WriteLine() |
この章では、まず次のように理解してください。
static が付いていない → オブジェクトを作ってから使う
static が付いている → クラス名から直接使うよく使っている静的メソッドの例
Section titled “よく使っている静的メソッドの例”これまでの章で、すでに静的メソッドを使っています。
Console.WriteLine("表示します");int number = int.Parse("123");また、数値の最大値を求める Math.Max も静的メソッドです。
using System;
class Program{ static void Main() { int value1 = 120; int value2 = 300;
int max = Math.Max(value1, value2);
Console.WriteLine($"大きい値:{max}"); }}実行結果:
大きい値:300Math.Max は、2つの値のうち大きい方を返すメソッドです。
よく使っている静的プロパティの例
Section titled “よく使っている静的プロパティの例”現在日時を取得する DateTime.Now は、静的プロパティです。
using System;
class Program{ static void Main() { DateTime now = DateTime.Now;
Console.WriteLine(now); }}DateTime.Now には () が付きません。
これは、現在日時という情報を取得しているためです。
DateTime now = DateTime.Now;一方、Math.Max には () が付きます。
int max = Math.Max(10, 20);このように、プロパティとメソッドでは書き方が異なります。
| 種類 | 例 | 書き方 |
|---|---|---|
| 静的プロパティ | DateTime.Now | () が付かない |
| 静的メソッド | Math.Max(10, 20) | () が付く |
エラーになる例:プロパティに()を付ける
Section titled “エラーになる例:プロパティに()を付ける”次のコードはエラーになります。
DateTime now = DateTime.Now();DateTime.Now はメソッドではなくプロパティなので、() は付けません。
正しくは次のように書きます。
DateTime now = DateTime.Now;8-2 インスタンスプロパティとインスタンスメソッド
Section titled “8-2 インスタンスプロパティとインスタンスメソッド”インスタンスとは
Section titled “インスタンスとは”インスタンスとは、クラスから作成されたオブジェクトのことです。
Employee employee = new Employee();このコードでは、Employee クラスから employee というインスタンスを作成しています。
この章では、オブジェクトとインスタンスはほぼ同じ意味として扱って構いません。
インスタンスプロパティ
Section titled “インスタンスプロパティ”インスタンスプロパティは、オブジェクトごとに持つ情報です。
次のコードでは、employee1 と employee2 がそれぞれ異なる値を持っています。
using System;
class Program{ static void Main() { Employee employee1 = new Employee { EmployeeId = 1001, Name = "山田太郎", Department = "営業部" };
Employee employee2 = new Employee { EmployeeId = 1002, Name = "佐藤花子", Department = "開発部" };
Console.WriteLine(employee1.Name); Console.WriteLine(employee2.Name); }}
class Employee{ public int EmployeeId { get; set; } public string Name { get; set; } public string Department { get; set; }}実行結果:
山田太郎佐藤花子同じ Name プロパティでも、オブジェクトごとに値が異なります。
employee1.Name → 山田太郎employee2.Name → 佐藤花子インスタンスメソッド
Section titled “インスタンスメソッド”インスタンスメソッドは、オブジェクトに対して実行する処理です。
using System;
class Program{ static void Main() { Employee employee1 = new Employee { EmployeeId = 1001, Name = "山田太郎", Department = "営業部" };
Employee employee2 = new Employee { EmployeeId = 1002, Name = "佐藤花子", Department = "開発部" };
employee1.PrintProfile(); employee2.PrintProfile(); }}
class Employee{ public int EmployeeId { get; set; } public string Name { get; set; } public string Department { get; set; }
public void PrintProfile() { Console.WriteLine($"社員番号:{EmployeeId}"); Console.WriteLine($"氏名:{Name}"); Console.WriteLine($"部署:{Department}"); }}実行結果:
社員番号:1001氏名:山田太郎部署:営業部社員番号:1002氏名:佐藤花子部署:開発部PrintProfile メソッドは同じですが、呼び出したオブジェクトによって表示される内容が変わります。
employee1.PrintProfile() → employee1 の情報を表示
employee2.PrintProfile() → employee2 の情報を表示DateTimeのインスタンスプロパティ
Section titled “DateTimeのインスタンスプロパティ”.NETが用意している型にも、インスタンスプロパティがあります。
次の例では、DateTime 型のオブジェクトから年、月、日を取り出しています。
using System;
class Program{ static void Main() { DateTime trainingStartDate = new DateTime(2026, 5, 18);
Console.WriteLine(trainingStartDate.Year); Console.WriteLine(trainingStartDate.Month); Console.WriteLine(trainingStartDate.Day); }}実行結果:
2026518Year、Month、Day は、trainingStartDate オブジェクトが持つ情報です。
そのため、インスタンスプロパティとして使います。
trainingStartDate.YeartrainingStartDate.MonthtrainingStartDate.DayDateTimeのインスタンスメソッド
Section titled “DateTimeのインスタンスメソッド”DateTime には、日付を計算するインスタンスメソッドもあります。
using System;
class Program{ static void Main() { DateTime trainingStartDate = new DateTime(2026, 5, 18);
DateTime afterSevenDays = trainingStartDate.AddDays(7);
Console.WriteLine(afterSevenDays); }}AddDays(7) は、trainingStartDate を基準にして7日後の日付を求める処理です。
trainingStartDate.AddDays(7)これは、特定の日付オブジェクトに対して処理を行っているため、インスタンスメソッドです。
インスタンスメンバーの整理
Section titled “インスタンスメンバーの整理”| 種類 | 例 | 意味 |
|---|---|---|
| インスタンスプロパティ | employee.Name | そのオブジェクトが持つ情報 |
| インスタンスメソッド | employee.PrintProfile() | そのオブジェクトに対して行う処理 |
| インスタンスプロパティ | trainingStartDate.Year | その日付の年 |
| インスタンスメソッド | trainingStartDate.AddDays(7) | その日付を基準に日付を計算する |
8-3 静的メソッドと静的プロパティ
Section titled “8-3 静的メソッドと静的プロパティ”静的プロパティ
Section titled “静的プロパティ”静的プロパティは、オブジェクトではなくクラスそのものに属する情報です。
代表的な例が DateTime.Now や DateTime.Today です。
using System;
class Program{ static void Main() { DateTime now = DateTime.Now; DateTime today = DateTime.Today;
Console.WriteLine($"現在日時:{now}"); Console.WriteLine($"今日の日付:{today}"); }}DateTime.Now は現在日時、DateTime.Today は今日の日付を取得します。
どちらも new DateTime() でオブジェクトを作らず、DateTime という型名から直接使っています。
静的メソッド
Section titled “静的メソッド”静的メソッドは、オブジェクトを作らずに、クラス名から直接呼び出すメソッドです。
次の例では、指定した年がうるう年かどうかを判定します。
using System;
class Program{ static void Main() { bool isLeapYear = DateTime.IsLeapYear(2024);
if (isLeapYear) { Console.WriteLine("うるう年です。"); } else { Console.WriteLine("うるう年ではありません。"); } }}実行結果:
うるう年です。DateTime.IsLeapYear(2024) は、DateTime クラスから直接呼び出している静的メソッドです。
Mathクラスの静的メソッド
Section titled “Mathクラスの静的メソッド”Math クラスには、数値計算に便利な静的メソッドが用意されています。
using System;
class Program{ static void Main() { int value1 = 340; int value2 = 500;
int max = Math.Max(value1, value2); int min = Math.Min(value1, value2);
Console.WriteLine($"大きい値:{max}"); Console.WriteLine($"小さい値:{min}"); }}実行結果:
大きい値:500小さい値:340Math.Max や Math.Min は、オブジェクトの状態を必要としません。
そのため、静的メソッドとして用意されています。
自分で静的メソッドを作る
Section titled “自分で静的メソッドを作る”ここからは、自分で静的メソッドを作成します。
次の例では、商品金額を計算する PriceCalculator クラスを作成します。
using System;
class Program{ static void Main() { int totalPrice = PriceCalculator.GetTotalPrice(180, 5);
Console.WriteLine($"合計金額:{totalPrice}円"); }}
class PriceCalculator{ public static int GetTotalPrice(int unitPrice, int quantity) { return unitPrice * quantity; }}実行結果:
合計金額:900円次の部分が静的メソッドです。
public static int GetTotalPrice(int unitPrice, int quantity)static が付いているため、次のようにクラス名から直接呼び出せます。
PriceCalculator.GetTotalPrice(180, 5);staticがない場合
Section titled “staticがない場合”もし static を付けない場合は、オブジェクトを作ってから呼び出す必要があります。
PriceCalculator calculator = new PriceCalculator();int totalPrice = calculator.GetTotalPrice(180, 5);一方、static が付いている場合は、オブジェクトを作らずに呼び出せます。
int totalPrice = PriceCalculator.GetTotalPrice(180, 5);自分で静的プロパティを作る
Section titled “自分で静的プロパティを作る”次に、研修情報を表す TrainingInfo クラスを作成します。
using System;
class Program{ static void Main() { TrainingInfo.CourseName = "C#基礎研修"; TrainingInfo.CurrentChapter = 8;
Console.WriteLine(TrainingInfo.CourseName); Console.WriteLine($"現在の章:第{TrainingInfo.CurrentChapter}章"); }}
class TrainingInfo{ public static string CourseName { get; set; } public static int CurrentChapter { get; set; }}実行結果:
C#基礎研修現在の章:第8章CourseName と CurrentChapter は、TrainingInfo クラスに属する静的プロパティです。
TrainingInfo.CourseNameTrainingInfo.CurrentChapterオブジェクトを作らず、クラス名から直接アクセスしています。
静的プロパティは共有される
Section titled “静的プロパティは共有される”静的プロパティは、クラスそのものに属するため、プログラム内で共有される値になります。
次の例では、AccessCounter クラスで回数を数えます。
using System;
class Program{ static void Main() { AccessCounter.CountUp(); AccessCounter.CountUp(); AccessCounter.CountUp();
Console.WriteLine($"実行回数:{AccessCounter.Count}"); }}
class AccessCounter{ public static int Count { get; set; }
public static void CountUp() { Count += 1; }}実行結果:
実行回数:3Count は静的プロパティなので、AccessCounter クラス全体で共有される値です。
静的メソッドからインスタンスプロパティは直接使えない
Section titled “静的メソッドからインスタンスプロパティは直接使えない”次のコードはエラーになります。
class Employee{ public string Name { get; set; }
public static void PrintName() { Console.WriteLine(Name); }}Name はインスタンスプロパティです。
つまり、具体的な Employee オブジェクトごとに異なる値を持ちます。
しかし、PrintName は静的メソッドなので、特定のオブジェクトに属していません。
そのため、どの社員の Name を表示すればよいのか分かりません。
正しくは、インスタンスメソッドにします。
class Employee{ public string Name { get; set; }
public void PrintName() { Console.WriteLine(Name); }}または、静的メソッドにオブジェクトを渡します。
class EmployeePrinter{ public static void PrintName(Employee employee) { Console.WriteLine(employee.Name); }}この段階では、次のように理解してください。
インスタンスプロパティ → オブジェクトごとに異なる情報
静的メソッド → オブジェクトを作らずに呼び出す処理
そのため、静的メソッドからインスタンスプロパティを直接使うことはできない8-4 静的クラス
Section titled “8-4 静的クラス”静的クラスとは
Section titled “静的クラスとは”静的クラスとは、静的メンバーだけを持つクラスです。
静的クラスは、オブジェクトを作成できません。
static class ClassName{ public static void MethodName() { }}静的クラスは、次のような共通処理をまとめるときによく使われます。
金額計算文字列操作配列の集計入力補助日付処理PriceCalculatorを静的クラスにする
Section titled “PriceCalculatorを静的クラスにする”先ほどの PriceCalculator を静的クラスにしてみます。
using System;
class Program{ static void Main() { int totalPrice = PriceCalculator.GetTotalPrice(180, 5);
Console.WriteLine($"合計金額:{totalPrice}円"); }}
static class PriceCalculator{ public static int GetTotalPrice(int unitPrice, int quantity) { return unitPrice * quantity; }}実行結果:
合計金額:900円PriceCalculator クラスは、金額計算という共通処理をまとめるためのクラスです。
このクラス自体に、商品名や数量などの状態を持たせる必要はありません。
そのため、静的クラスとして定義できます。
複数の静的メソッドをまとめる
Section titled “複数の静的メソッドをまとめる”税込金額や割引後金額を求めるメソッドも追加してみます。
using System;
class Program{ static void Main() { int totalPrice = PriceCalculator.GetTotalPrice(180, 5); decimal taxIncludedPrice = PriceCalculator.GetTaxIncludedPrice(2980m, 1.10m); int discountedPrice = PriceCalculator.GetDiscountedPrice(5000, 500);
Console.WriteLine($"合計金額:{totalPrice}円"); Console.WriteLine($"税込金額:{taxIncludedPrice}円"); Console.WriteLine($"割引後金額:{discountedPrice}円"); }}
static class PriceCalculator{ public static int GetTotalPrice(int unitPrice, int quantity) { return unitPrice * quantity; }
public static decimal GetTaxIncludedPrice(decimal price, decimal taxRate) { return price * taxRate; }
public static int GetDiscountedPrice(int price, int discount) { return price - discount; }}実行結果:
合計金額:900円税込金額:3278.0円割引後金額:4500円このように、関連する共通処理を静的クラスにまとめることができます。
静的クラスはnewできない
Section titled “静的クラスはnewできない”静的クラスは、オブジェクトを作成できません。
次のコードはエラーになります。
PriceCalculator calculator = new PriceCalculator();PriceCalculator は静的クラスなので、new でインスタンスを作ることはできません。
正しくは、次のようにクラス名から直接呼び出します。
int totalPrice = PriceCalculator.GetTotalPrice(180, 5);入力補助クラスを作る
Section titled “入力補助クラスを作る”次の例では、整数入力を受け取る処理を静的クラスにまとめます。
using System;
class Program{ static void Main() { int unitPrice = InputHelper.ReadInt("単価を入力してください。"); int quantity = InputHelper.ReadInt("数量を入力してください。");
int totalPrice = unitPrice * quantity;
Console.WriteLine($"合計金額:{totalPrice}円"); }}
static class InputHelper{ public static int ReadInt(string message) { Console.WriteLine(message);
string input = Console.ReadLine(); int number = int.Parse(input);
return number; }}実行例:
単価を入力してください。180数量を入力してください。5合計金額:900円InputHelper.ReadInt を使うことで、入力メッセージの表示、入力受け取り、数値変換の処理をまとめられます。
静的クラスの使いどころ
Section titled “静的クラスの使いどころ”静的クラスは便利ですが、何でも静的クラスにすればよいわけではありません。
この章では、次のように考えてください。
| 使い方 | 向いている例 |
|---|---|
| インスタンスクラス | 社員、商品、注文など、個別のデータを持つもの |
| 静的クラス | 金額計算、入力補助、配列処理など、共通処理をまとめるもの |
たとえば、社員は1人ずつ異なる情報を持つため、インスタンスクラスが向いています。
Employee employee = new Employee();一方、金額計算のように、特定のオブジェクトの状態を持たなくてもよい処理は、静的クラスにまとめることがあります。
PriceCalculator.GetTotalPrice(180, 5);よくあるつまずき
Section titled “よくあるつまずき”この章でよくあるつまずきを確認します。
| つまずき | 原因 | 対応 |
|---|---|---|
static の意味が分からない | オブジェクトに属するものとクラスに属するものの区別が曖昧 | new が必要かどうかで考える |
DateTime.Now() と書いてしまう | プロパティとメソッドを混同している | Now はプロパティなので () を付けない |
Math.Max をnewして使おうとする | 静的メソッドの使い方に慣れていない | Math.Max(値1, 値2) のようにクラス名から呼ぶ |
| 静的メソッドからインスタンスプロパティを直接使おうとする | どのオブジェクトの値か分からない | インスタンスメソッドにするか、引数でオブジェクトを渡す |
| 静的クラスをnewしようとする | 静的クラスはインスタンス化できない | クラス名から直接メソッドを呼び出す |
| 何でもstaticにしてしまう | 個別の状態を持つものまでstaticにしている | 社員や商品など個別データを持つものはインスタンスにする |
| staticを避けすぎる | 共通処理まで毎回オブジェクト化している | 状態を持たない共通処理はstaticも候補にする |
static void Main() のstaticが気になる | Mainはプログラム開始地点として静的に呼び出される | 詳細は深追いせず、Mainは特別な開始メソッドと考える |
学んだことチェック
Section titled “学んだことチェック”次の項目について、自分で説明できるか確認してください。
-
staticの基本的な意味を説明できる - インスタンスプロパティとは何かを説明できる
- インスタンスメソッドとは何かを説明できる
- 静的プロパティとは何かを説明できる
- 静的メソッドとは何かを説明できる
-
DateTime.Nowが静的プロパティであることを説明できる -
Math.Maxが静的メソッドであることを説明できる - 自分で静的メソッドを作成できる
- 自分で静的プロパティを作成できる
- 静的クラスを作成できる
- 静的クラスを
newできないことを説明できる - 静的メソッドからインスタンスプロパティを直接使えない理由をおおまかに説明できる
- インスタンスクラスと静的クラスの使い分けをおおまかに説明できる
研修の進め方によっては、隣の人またはチーム内で説明確認を行います。
次の内容を、自分の言葉で説明してください。
employee.PrintProfile()とConsole.WriteLine()の呼び出し方の違いは何ですか。staticが付いたメソッドは、どのように呼び出しますか。DateTime.Nowに()が付かないのはなぜですか。Math.Max(10, 20)は何をするメソッドですか。- 静的メソッドからインスタンスプロパティを直接使えないのはなぜですか。
- 静的クラスはどのような処理をまとめるときに向いていますか。
説明するときは、完全な答えでなくても構いません。
自分の言葉で説明しようとすることが大切です。
この章の演習課題に取り組みます。
制限時間は 60分 です。
時間内にすべて完成しなくても構いません。
できたところまでを保存し、Gitに提出してください。
提出について
制限時間になったら、完成・未完成に関わらず作業を止めます。 できたところまでをGitにcommitし、pushしてください。 未完成の場合は、どこまでできたかを報告できるようにしておきましょう。
まずは、全員が必須課題に取り組んでください。
課題8-1 DateTime.Nowを使う
Section titled “課題8-1 DateTime.Nowを使う”DateTime.Now を使って、現在日時を表示してください。
実行結果例:
現在日時:2026/05/18 10:30:00条件:
DateTime.Nowを使うDateTime.Now()と書かない- 現在日時を変数に代入してから表示する
課題8-2 DateTime.Todayを使う
Section titled “課題8-2 DateTime.Todayを使う”DateTime.Today を使って、今日の日付の年、月、日を表示してください。
実行結果例:
年:2026月:5日:18条件:
DateTime.Todayを使うYear、Month、Dayを使う()が付くものと付かないものを意識する
課題8-3 Math.MaxとMath.Minを使う
Section titled “課題8-3 Math.MaxとMath.Minを使う”2つの数値を変数に代入し、大きい値と小さい値を表示してください。
実行結果例:
値1:340値2:500大きい値:500小さい値:340条件:
Math.Maxを使うMath.Minを使う- 結果を変数に代入してから表示する
課題8-4 PriceCalculatorクラスを作成する
Section titled “課題8-4 PriceCalculatorクラスを作成する”金額計算用の PriceCalculator クラスを作成し、静的メソッド GetTotalPrice を定義してください。
仕様:
| メソッド名 | 戻り値 | 引数 | 処理 |
|---|---|---|---|
GetTotalPrice | int | int unitPrice, int quantity | 単価 × 数量を返す |
実行結果例:
合計金額:900円条件:
PriceCalculatorクラスを作成するGetTotalPriceメソッドにstaticを付けるPriceCalculator.GetTotalPrice(180, 5)のように呼び出す
必須課題が終わった人は、発展課題に取り組んでください。
課題8-5 税込金額を求める静的メソッド
Section titled “課題8-5 税込金額を求める静的メソッド”PriceCalculator クラスに、税込金額を求める静的メソッドを追加してください。
仕様:
| メソッド名 | 戻り値 | 引数 | 処理 |
|---|---|---|---|
GetTaxIncludedPrice | decimal | decimal price, decimal taxRate | 税込金額を返す |
実行結果例:
税込金額:3278.0円条件:
decimal型を使うstaticメソッドとして定義するPriceCalculator.GetTaxIncludedPrice(2980m, 1.10m)のように呼び出す
課題8-6 割引後金額を求める静的メソッド
Section titled “課題8-6 割引後金額を求める静的メソッド”PriceCalculator クラスに、割引後金額を求める静的メソッドを追加してください。
仕様:
| メソッド名 | 戻り値 | 引数 | 処理 |
|---|---|---|---|
GetDiscountedPrice | int | int price, int discount | 価格 - 割引額を返す |
実行結果例:
割引後金額:4500円条件:
staticメソッドとして定義する- 戻り値を変数に受け取って表示する
課題8-7 TrainingInfoクラスを作成する
Section titled “課題8-7 TrainingInfoクラスを作成する”研修情報を管理する TrainingInfo クラスを作成してください。
静的プロパティ:
| プロパティ名 | 型 | 意味 |
|---|---|---|
CourseName | string | 研修名 |
CurrentChapter | int | 現在の章番号 |
実行結果例:
研修名:C#基礎研修現在の章:第8章条件:
- 静的プロパティを定義する
- クラス名から直接アクセスする
new TrainingInfo()は使わない
課題8-8 InputHelperクラスを作成する
Section titled “課題8-8 InputHelperクラスを作成する”整数入力を補助する InputHelper 静的クラスを作成してください。
仕様:
| メソッド名 | 戻り値 | 引数 | 処理 |
|---|---|---|---|
ReadInt | int | string message | メッセージを表示し、入力値を整数に変換して返す |
実行例:
単価を入力してください。180数量を入力してください。5合計金額:900円条件:
static class InputHelperを作成するReadIntメソッドをstaticにするConsole.ReadLineとint.Parseを使うInputHelper.ReadInt("単価を入力してください。")のように呼び出す
課題8-9 ArrayCalculator静的クラスを作成する
Section titled “課題8-9 ArrayCalculator静的クラスを作成する”整数配列の合計と平均を求める静的クラスを作成してください。
仕様:
| クラス名 | メソッド名 | 戻り値 | 引数 |
|---|---|---|---|
ArrayCalculator | GetTotal | int | int[] numbers |
ArrayCalculator | GetAverage | double | int[] numbers |
実行結果例:
合計:398平均:79.6条件:
static class ArrayCalculatorを作成するGetTotalメソッドを作成するGetAverageメソッドを作成するGetAverageの中でGetTotalを呼び出してもよい- 配列
{ 80, 75, 90, 68, 85 }で動作確認する
Gitへの提出
Section titled “Gitへの提出”課題が終わったら、できたところまでをGitに提出します。
まず、現在の状態を確認します。
git status変更されたファイルを追加します。
git add .コミットします。
git commit -m "Chapter08 静的メソッドと静的クラス"ファイルサーバー上のリポジトリへpushします。
git pushGitの操作でエラーが出た場合は、自己判断で同じ操作を繰り返さず、講師に確認してください。
提出前チェックリスト
Section titled “提出前チェックリスト”提出前に、次の項目を確認してください。
- プログラムをVisual Studioから実行できる
-
DateTime.NowやDateTime.Todayを使えている -
Math.MaxやMath.Minを使えている - 静的メソッドを定義できている
- 静的プロパティを定義できている
- 静的クラスを定義できている
- 静的メソッドをクラス名から呼び出している
- 静的クラスを
newしていない - インスタンスメンバーと静的メンバーの違いを意識できている
- メソッドには
()が付くことを確認している - プロパティには通常
()を付けないことを確認している - インデントが整っている
- Gitにcommitしている
- Gitにpushしている
この章のまとめ
Section titled “この章のまとめ”この章では、静的メソッド、静的プロパティ、静的クラスについて学習しました。
この章で学んだ主な内容は次の通りです。
staticが付いたメンバーは、クラスそのものに属する- インスタンスプロパティは、オブジェクトごとに持つ情報である
- インスタンスメソッドは、オブジェクトに対して実行する処理である
- 静的プロパティは、クラス名から直接参照できる情報である
- 静的メソッドは、クラス名から直接呼び出せる処理である
DateTime.Nowは静的プロパティであるMath.MaxやDateTime.IsLeapYearは静的メソッドである- 静的メソッドには
staticを付ける - 静的クラスは、静的メンバーだけを持つクラスである
- 静的クラスは
newできない - 状態を持たない共通処理は、静的クラスにまとめることができる
- 社員や商品など、個別の情報を持つものは、インスタンスとして扱うのが自然である
次章では、クラスを使いこなすための基本クラスや名前空間 を学習します。
文字列を扱う String、数値計算に使う Math、日付を扱う DateTime、ファイル操作に使う File など、.NETが用意しているクラスを利用しながら、クラスの使い方にさらに慣れていきます。