Skip to content

第8章 静的メソッド/静的プロパティ/静的クラス

この章では、static キーワードを使った 静的メソッド静的プロパティ静的クラス について学習します。

第7章では、Employee クラスを作成し、new を使ってオブジェクトを作成しました。

Employee employee = new Employee();
employee.Name = "山田太郎";
employee.PrintProfile();

このように、オブジェクトを作成してから使うプロパティやメソッドを、インスタンスプロパティ、インスタンスメソッドと呼びます。

一方で、これまでの章でも、オブジェクトを作成せずに使ってきたものがあります。

Console.WriteLine("こんにちは");
int number = int.Parse("123");

Console.WriteLineint.Parse は、new Console()new int() のようにオブジェクトを作ってから呼び出していません。

このように、クラス名から直接呼び出せるメンバーを 静的メンバー と呼びます。

この章では、次の違いを整理します。

オブジェクトを作ってから使うもの
→ インスタンスプロパティ、インスタンスメソッド
クラス名から直接使うもの
→ 静的プロパティ、静的メソッド

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

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

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

  • static の基本的な意味を説明できる
  • インスタンスプロパティと静的プロパティの違いを説明できる
  • インスタンスメソッドと静的メソッドの違いを説明できる
  • DateTime.NowDateTime.Today のような静的プロパティを使える
  • DateTime.IsLeapYearMath.Max のような静的メソッドを使える
  • 自分で静的メソッドを定義できる
  • 自分で静的プロパティを定義できる
  • 静的クラスを作成できる
  • 共通処理を静的クラスにまとめる考え方を理解できる
  • 静的メソッドからインスタンスプロパティを直接使えない理由をおおまかに説明できる

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

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

  • Visual Studio 2022でコンソールアプリを作成できる
  • .NET 8.0 を選択できる
  • クラスを作成できる
  • プロパティを定義できる
  • メソッドを定義できる
  • new を使ってオブジェクトを作成できる
  • 第7章の内容をGitに提出済みである

オブジェクトを作って使う場合

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}");
}
}

実行結果:

大きい値:300

Math.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 インスタンスプロパティとインスタンスメソッド”

インスタンスとは、クラスから作成されたオブジェクトのことです。

Employee employee = new Employee();

このコードでは、Employee クラスから employee というインスタンスを作成しています。

この章では、オブジェクトとインスタンスはほぼ同じ意味として扱って構いません。


インスタンスプロパティは、オブジェクトごとに持つ情報です。

次のコードでは、employee1employee2 がそれぞれ異なる値を持っています。

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 → 佐藤花子

インスタンスメソッドは、オブジェクトに対して実行する処理です。

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);
}
}

実行結果:

2026
5
18

YearMonthDay は、trainingStartDate オブジェクトが持つ情報です。

そのため、インスタンスプロパティとして使います。

trainingStartDate.Year
trainingStartDate.Month
trainingStartDate.Day

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)

これは、特定の日付オブジェクトに対して処理を行っているため、インスタンスメソッドです。


種類意味
インスタンスプロパティemployee.Nameそのオブジェクトが持つ情報
インスタンスメソッドemployee.PrintProfile()そのオブジェクトに対して行う処理
インスタンスプロパティtrainingStartDate.Yearその日付の年
インスタンスメソッドtrainingStartDate.AddDays(7)その日付を基準に日付を計算する

8-3 静的メソッドと静的プロパティ

Section titled “8-3 静的メソッドと静的プロパティ”

静的プロパティは、オブジェクトではなくクラスそのものに属する情報です。

代表的な例が DateTime.NowDateTime.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 という型名から直接使っています。


静的メソッドは、オブジェクトを作らずに、クラス名から直接呼び出すメソッドです。

次の例では、指定した年がうるう年かどうかを判定します。

using System;
class Program
{
static void Main()
{
bool isLeapYear = DateTime.IsLeapYear(2024);
if (isLeapYear)
{
Console.WriteLine("うるう年です。");
}
else
{
Console.WriteLine("うるう年ではありません。");
}
}
}

実行結果:

うるう年です。

DateTime.IsLeapYear(2024) は、DateTime クラスから直接呼び出している静的メソッドです。


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
小さい値:340

Math.MaxMath.Min は、オブジェクトの状態を必要としません。

そのため、静的メソッドとして用意されています。


ここからは、自分で静的メソッドを作成します。

次の例では、商品金額を計算する 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 を付けない場合は、オブジェクトを作ってから呼び出す必要があります。

PriceCalculator calculator = new PriceCalculator();
int totalPrice = calculator.GetTotalPrice(180, 5);

一方、static が付いている場合は、オブジェクトを作らずに呼び出せます。

int totalPrice = PriceCalculator.GetTotalPrice(180, 5);

次に、研修情報を表す 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章

CourseNameCurrentChapter は、TrainingInfo クラスに属する静的プロパティです。

TrainingInfo.CourseName
TrainingInfo.CurrentChapter

オブジェクトを作らず、クラス名から直接アクセスしています。


静的プロパティは、クラスそのものに属するため、プログラム内で共有される値になります。

次の例では、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;
}
}

実行結果:

実行回数:3

Count は静的プロパティなので、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);
}
}

この段階では、次のように理解してください。

インスタンスプロパティ
→ オブジェクトごとに異なる情報
静的メソッド
→ オブジェクトを作らずに呼び出す処理
そのため、静的メソッドからインスタンスプロパティを直接使うことはできない

静的クラスとは、静的メンバーだけを持つクラスです。

静的クラスは、オブジェクトを作成できません。

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円

このように、関連する共通処理を静的クラスにまとめることができます。


静的クラスは、オブジェクトを作成できません。

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

PriceCalculator calculator = new PriceCalculator();

PriceCalculator は静的クラスなので、new でインスタンスを作ることはできません。

正しくは、次のようにクラス名から直接呼び出します。

int totalPrice = PriceCalculator.GetTotalPrice(180, 5);

次の例では、整数入力を受け取る処理を静的クラスにまとめます。

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 を使うことで、入力メッセージの表示、入力受け取り、数値変換の処理をまとめられます。


静的クラスは便利ですが、何でも静的クラスにすればよいわけではありません。

この章では、次のように考えてください。

使い方向いている例
インスタンスクラス社員、商品、注文など、個別のデータを持つもの
静的クラス金額計算、入力補助、配列処理など、共通処理をまとめるもの

たとえば、社員は1人ずつ異なる情報を持つため、インスタンスクラスが向いています。

Employee employee = new Employee();

一方、金額計算のように、特定のオブジェクトの状態を持たなくてもよい処理は、静的クラスにまとめることがあります。

PriceCalculator.GetTotalPrice(180, 5);

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

つまずき原因対応
static の意味が分からないオブジェクトに属するものとクラスに属するものの区別が曖昧new が必要かどうかで考える
DateTime.Now() と書いてしまうプロパティとメソッドを混同しているNow はプロパティなので () を付けない
Math.Max をnewして使おうとする静的メソッドの使い方に慣れていないMath.Max(値1, 値2) のようにクラス名から呼ぶ
静的メソッドからインスタンスプロパティを直接使おうとするどのオブジェクトの値か分からないインスタンスメソッドにするか、引数でオブジェクトを渡す
静的クラスをnewしようとする静的クラスはインスタンス化できないクラス名から直接メソッドを呼び出す
何でもstaticにしてしまう個別の状態を持つものまでstaticにしている社員や商品など個別データを持つものはインスタンスにする
staticを避けすぎる共通処理まで毎回オブジェクト化している状態を持たない共通処理はstaticも候補にする
static void Main() のstaticが気になるMainはプログラム開始地点として静的に呼び出される詳細は深追いせず、Mainは特別な開始メソッドと考える

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

  • static の基本的な意味を説明できる
  • インスタンスプロパティとは何かを説明できる
  • インスタンスメソッドとは何かを説明できる
  • 静的プロパティとは何かを説明できる
  • 静的メソッドとは何かを説明できる
  • DateTime.Now が静的プロパティであることを説明できる
  • Math.Max が静的メソッドであることを説明できる
  • 自分で静的メソッドを作成できる
  • 自分で静的プロパティを作成できる
  • 静的クラスを作成できる
  • 静的クラスを new できないことを説明できる
  • 静的メソッドからインスタンスプロパティを直接使えない理由をおおまかに説明できる
  • インスタンスクラスと静的クラスの使い分けをおおまかに説明できる

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

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

  1. employee.PrintProfile()Console.WriteLine() の呼び出し方の違いは何ですか。
  2. static が付いたメソッドは、どのように呼び出しますか。
  3. DateTime.Now() が付かないのはなぜですか。
  4. Math.Max(10, 20) は何をするメソッドですか。
  5. 静的メソッドからインスタンスプロパティを直接使えないのはなぜですか。
  6. 静的クラスはどのような処理をまとめるときに向いていますか。

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


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

制限時間は 60分 です。

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

提出について

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


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


DateTime.Now を使って、現在日時を表示してください。

実行結果例:

現在日時:2026/05/18 10:30:00

条件:

  • DateTime.Now を使う
  • DateTime.Now() と書かない
  • 現在日時を変数に代入してから表示する

DateTime.Today を使って、今日の日付の年、月、日を表示してください。

実行結果例:

年:2026
月:5
日:18

条件:

  • DateTime.Today を使う
  • YearMonthDay を使う
  • () が付くものと付かないものを意識する

2つの数値を変数に代入し、大きい値と小さい値を表示してください。

実行結果例:

値1:340
値2:500
大きい値:500
小さい値:340

条件:

  • Math.Max を使う
  • Math.Min を使う
  • 結果を変数に代入してから表示する

課題8-4 PriceCalculatorクラスを作成する

Section titled “課題8-4 PriceCalculatorクラスを作成する”

金額計算用の PriceCalculator クラスを作成し、静的メソッド GetTotalPrice を定義してください。

仕様:

メソッド名戻り値引数処理
GetTotalPriceintint unitPrice, int quantity単価 × 数量を返す

実行結果例:

合計金額:900円

条件:

  • PriceCalculator クラスを作成する
  • GetTotalPrice メソッドに static を付ける
  • PriceCalculator.GetTotalPrice(180, 5) のように呼び出す

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


課題8-5 税込金額を求める静的メソッド

Section titled “課題8-5 税込金額を求める静的メソッド”

PriceCalculator クラスに、税込金額を求める静的メソッドを追加してください。

仕様:

メソッド名戻り値引数処理
GetTaxIncludedPricedecimaldecimal price, decimal taxRate税込金額を返す

実行結果例:

税込金額:3278.0円

条件:

  • decimal 型を使う
  • static メソッドとして定義する
  • PriceCalculator.GetTaxIncludedPrice(2980m, 1.10m) のように呼び出す

課題8-6 割引後金額を求める静的メソッド

Section titled “課題8-6 割引後金額を求める静的メソッド”

PriceCalculator クラスに、割引後金額を求める静的メソッドを追加してください。

仕様:

メソッド名戻り値引数処理
GetDiscountedPriceintint price, int discount価格 - 割引額を返す

実行結果例:

割引後金額:4500円

条件:

  • static メソッドとして定義する
  • 戻り値を変数に受け取って表示する

課題8-7 TrainingInfoクラスを作成する

Section titled “課題8-7 TrainingInfoクラスを作成する”

研修情報を管理する TrainingInfo クラスを作成してください。

静的プロパティ:

プロパティ名意味
CourseNamestring研修名
CurrentChapterint現在の章番号

実行結果例:

研修名:C#基礎研修
現在の章:第8章

条件:

  • 静的プロパティを定義する
  • クラス名から直接アクセスする
  • new TrainingInfo() は使わない

課題8-8 InputHelperクラスを作成する

Section titled “課題8-8 InputHelperクラスを作成する”

整数入力を補助する InputHelper 静的クラスを作成してください。

仕様:

メソッド名戻り値引数処理
ReadIntintstring messageメッセージを表示し、入力値を整数に変換して返す

実行例:

単価を入力してください。
180
数量を入力してください。
5
合計金額:900円

条件:

  • static class InputHelper を作成する
  • ReadInt メソッドを static にする
  • Console.ReadLineint.Parse を使う
  • InputHelper.ReadInt("単価を入力してください。") のように呼び出す

課題8-9 ArrayCalculator静的クラスを作成する

Section titled “課題8-9 ArrayCalculator静的クラスを作成する”

整数配列の合計と平均を求める静的クラスを作成してください。

仕様:

クラス名メソッド名戻り値引数
ArrayCalculatorGetTotalintint[] numbers
ArrayCalculatorGetAveragedoubleint[] numbers

実行結果例:

合計:398
平均:79.6

条件:

  • static class ArrayCalculator を作成する
  • GetTotal メソッドを作成する
  • GetAverage メソッドを作成する
  • GetAverage の中で GetTotal を呼び出してもよい
  • 配列 { 80, 75, 90, 68, 85 } で動作確認する

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

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

Terminal window
git status

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

Terminal window
git add .

コミットします。

Terminal window
git commit -m "Chapter08 静的メソッドと静的クラス"

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

Terminal window
git push

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


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

  • プログラムをVisual Studioから実行できる
  • DateTime.NowDateTime.Today を使えている
  • Math.MaxMath.Min を使えている
  • 静的メソッドを定義できている
  • 静的プロパティを定義できている
  • 静的クラスを定義できている
  • 静的メソッドをクラス名から呼び出している
  • 静的クラスを new していない
  • インスタンスメンバーと静的メンバーの違いを意識できている
  • メソッドには () が付くことを確認している
  • プロパティには通常 () を付けないことを確認している
  • インデントが整っている
  • Gitにcommitしている
  • Gitにpushしている

この章では、静的メソッド、静的プロパティ、静的クラスについて学習しました。

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

  • static が付いたメンバーは、クラスそのものに属する
  • インスタンスプロパティは、オブジェクトごとに持つ情報である
  • インスタンスメソッドは、オブジェクトに対して実行する処理である
  • 静的プロパティは、クラス名から直接参照できる情報である
  • 静的メソッドは、クラス名から直接呼び出せる処理である
  • DateTime.Now は静的プロパティである
  • Math.MaxDateTime.IsLeapYear は静的メソッドである
  • 静的メソッドには static を付ける
  • 静的クラスは、静的メンバーだけを持つクラスである
  • 静的クラスは new できない
  • 状態を持たない共通処理は、静的クラスにまとめることができる
  • 社員や商品など、個別の情報を持つものは、インスタンスとして扱うのが自然である

次章では、クラスを使いこなすための基本クラスや名前空間 を学習します。

文字列を扱う String、数値計算に使う Math、日付を扱う DateTime、ファイル操作に使う File など、.NETが用意しているクラスを利用しながら、クラスの使い方にさらに慣れていきます。