Menu
Coddy logo textTech

静的クラス

CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 13/70。

クラスが静的(static)メンバのみを含み、そのインスタンスを作成する必要がまったくない場合、クラス全体を static として宣言できます。これにより、コンパイラに対してそのクラスがインスタンス化できないこと、および静的メンバのみを含めることができることを伝えます。

public static class MathHelper
{
    public static double Pi = 3.14159;
    
    public static int Square(int number)
    {
        return number * number;
    }
    
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

静的クラスは、静的メンバーと同じように、クラス名で直接呼び出すことで使用します。

int result = MathHelper.Square(5);
double pi = MathHelper.Pi;

静的クラスには重要な制限があります。new を使用してインスタンスを作成することはできず、インスタンスコンストラクタを持つことも、継承することもできません。これらは静的フィールド、プロパティ、およびメソッドのみを含むことができます。

これまで使用してきた Console クラスや Math クラスは、静的クラスの完璧な例です。これらはオブジェクトの状態を必要とせずに、ユーティリティ機能を提供します。静的クラスは、インスタンス固有のデータを必要としない、関連するヘルパーメソッドや定数をグループ化するのに最適です。

challenge icon

チャレンジ

簡単

オブジェクトの状態を必要としない、関連するヘルパーメソッドをグループ化するために、静的クラスを使用して温度変換ユーティリティを作成しましょう。

コードを整理するために、2つのファイルを作成します:

  • TemperatureConverter.cs: Utilities 名前空間内に TemperatureConverter という名前の静的クラスを定義します。このクラスには以下を含める必要があります:
    • -273.15 に設定された静的フィールド AbsoluteZeroCelsius
    • 摂氏を華氏に変換する静的メソッド CelsiusToFahrenheit(double celsius)。公式は (celsius * 9 / 5) + 32 を使用します。
    • 華氏を摂氏に変換する静的メソッド FahrenheitToCelsius(double fahrenheit)。公式は (fahrenheit - 32) * 5 / 9 を使用します。
    • 温度が絶対零度より高い場合に true を返す静的メソッド IsAboveAbsoluteZero(double celsius)
  • Program.cs: メインファイルで、静的クラスを使用して変換を実行します。入力から摂氏の温度値を読み取り、変換結果と検証結果を表示します。

1つの入力を受け取ります:摂氏の温度値です。

結果を以下の形式で出力してください:

{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}C

例えば、入力が 25 の場合、出力は以下のようになります:

25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15C

静的クラスはインスタンス化できないことに注意してください。TemperatureConverter.CelsiusToFahrenheit(25) のように、すべてのメソッドをクラス名で直接呼び出します。

チートシート

staticクラスは静的メンバのみを含むことができ、インスタンス化することはできません。オブジェクトの状態を必要としない、関連するユーティリティメソッドや定数をグループ化するために使用されます。

public static class MathHelper
{
    public static double Pi = 3.14159;
    
    public static int Square(int number)
    {
        return number * number;
    }
    
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

静的クラスのメンバは、クラス名で直接アクセスされます:

int result = MathHelper.Square(5);
double pi = MathHelper.Pi;

静的クラスの制限事項:

  • newでインスタンス化することはできません
  • インスタンスコンストラクタを持つことはできません
  • 継承することはできません
  • 静的フィールド、プロパティ、およびメソッドのみを含むことができます

一般的な例としては、オブジェクトの状態を必要とせずにユーティリティ機能を提供するConsoleクラスやMathクラスがあります。

自分で試してみよう

using System;
using Utilities;

class Program
{
    public static void Main(string[] args)
    {
        // 摂氏温度を読み取る
        double celsius = Convert.ToDouble(Console.ReadLine());
        
        // TODO: TemperatureConverter の静的メソッドを使用して以下を行う:
        // 1. 摂氏を華氏に変換する
        // 2. 華氏を摂氏に戻す
        // 3. 温度が絶対零度より上かどうかを確認する
        // 4. 絶対零度の定数を取得する
        
        // TODO: 以下の形式で結果を出力する:
        // {celsius}C = {fahrenheit}F
        // {fahrenheit}F = {convertedBack}C
        // Above Absolute Zero: {True/False}
        // Absolute Zero: {AbsoluteZeroCelsius}C
        
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン