0Pricing
C# Academy · レッスン

ユーティリティ用の静的クラス

静的クラスにヘルパー関数をまとめます。

「ユーティリティ用の静的クラス」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

静的クラスとは

静的クラスは static class で宣言します。静的メンバーだけを含むことができ、インスタンス化できません

using System;

static class StringUtils
{
    public static string Shout(string s) => s.ToUpper() + "!";
}

class Program
{
    static void Main()
    {
        Console.WriteLine(StringUtils.Shout("hello"));
    }
}

インスタンスは作成できません

静的クラスに対して new を記述することはありません。すべてのアクセスはクラス名を直接通して行います。

using System;

static class MathUtils
{
    public static int Cube(int x) => x * x * x;
}

class Program
{
    static void Main()
    {
        // No instance needed
        Console.WriteLine(MathUtils.Cube(3));
    }
}

静的メンバーだけを使用できます

コンパイラーによって、静的クラスのすべてのメンバーが static であることが強制されます。インスタンスフィールドやコンストラクターは定義できません。

using System;

static class Temperature
{
    public static double ToFahrenheit(double c) => c * 9 / 5 + 32;
    public static double ToCelsius(double f) => (f - 32) * 5 / 9;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Temperature.ToFahrenheit(100));
        Console.WriteLine(Temperature.ToCelsius(32));
    }
}

関連するヘルパーをまとめる

静的クラスを使うと、同じテーマを持つ関数をまとめ、Validation.IsEmail(...) のように明確な名前空間を与えられます。

using System;

static class Validation
{
    public static bool IsPositive(int n) => n > 0;
    public static bool IsEmail(string s) => s.Contains("@") && s.Contains(".");
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Validation.IsPositive(5));
        Console.WriteLine(Validation.IsEmail("a@b.com"));
    }
}

組み込みの Math クラス

.NET の Math クラスは静的クラスです。インスタンス化することなく、Math.Sqrt や Math.Max などを呼び出します。

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine(Math.Max(3, 9));
        Console.WriteLine(Math.Sqrt(144));
        Console.WriteLine(Math.Round(3.14159, 2));
    }
}

静的フィールドを持つ静的クラス

静的クラスには、そのメソッドで使用する共有定数や構成のための静的フィールドを含めることができます。

using System;

static class Pricing
{
    public static decimal Tax = 0.08m;

    public static decimal WithTax(decimal price) => price + price * Tax;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Pricing.WithTax(100m));
    }
}

純粋関数

ユーティリティメソッドは純粋関数にするのが最適です。つまり、出力が入力だけに依存し、隠れた状態を持たないようにします。これにより、予測しやすくテストしやすくなります。

using System;

static class Geometry
{
    public static double RectArea(double w, double h) => w * h;
    public static double TriArea(double b, double h) => 0.5 * b * h;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Geometry.RectArea(4, 5));
        Console.WriteLine(Geometry.TriArea(6, 3));
    }
}

ユーティリティメソッドの組み合わせ

静的ヘルパーは互いに呼び出すことができ、小さな処理を組み合わせてより大きな処理を構築できます。

using System;

static class TextUtils
{
    public static string Clean(string s) => s.Trim().ToLower();
    public static string Slug(string s) => Clean(s).Replace(" ", "-");
}

class Program
{
    static void Main()
    {
        Console.WriteLine(TextUtils.Slug("  Hello World  "));
    }
}

静的クラスと通常のクラス内の静的メンバー

型がヘルパーだけで構成される場合は、クラス全体を静的にします。ヘルパーとインスタンスを混在させる場合は、静的メンバーを一部含む通常のクラスにします。

using System;

static class Convert2
{
    public static int FeetToInches(int feet) => feet * 12;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Convert2.FeetToInches(3) + " inches");
    }
}

ユーティリティを見つけやすくする

ヘルパーを適切な名前の静的クラス(DateUtils、StringUtils)にまとめると、ほかの開発者が簡単に見つけられます。

using System;

static class DateUtils
{
    public static bool IsWeekend(DayOfWeek d) =>
        d == DayOfWeek.Saturday || d == DayOfWeek.Sunday;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(DateUtils.IsWeekend(DayOfWeek.Sunday));
        Console.WriteLine(DateUtils.IsWeekend(DayOfWeek.Monday));
    }
}

まとめてみましょう

静的ユーティリティクラスは、状態を持たないロジックを明確な名前のもとに集約し、コードベース全体での重複を減らします。

using System;

static class MoneyUtils
{
    public static string Format(decimal amount) => "$" + amount.ToString("0.00");
    public static decimal ApplyDiscount(decimal price, double pct) =>
        price * (decimal)(1 - pct / 100);
}

class Program
{
    static void Main()
    {
        decimal discounted = MoneyUtils.ApplyDiscount(80m, 25);
        Console.WriteLine(MoneyUtils.Format(discounted));
    }
}

理解度チェック

静的クラスについての理解度を確認しましょう。

まとめ

静的クラス(static class X)はインスタンス化できず、静的メンバーだけを含むことができます。状態を持たないユーティリティ関数や定数を、説明的な名前のもとにまとめる標準的な場所です。組み込みの Math クラスがよく知られた例です。

using System;

static class Util
{
    public static int Double(int n) => n * 2;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Util.Double(21));
    }
}

よくある質問

「ユーティリティ用の静的クラス」レッスンは無料ですか?

はい。「ユーティリティ用の静的クラス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「ユーティリティ用の静的クラス」で何を学びますか?

静的クラスにヘルパー関数をまとめます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ユーティリティ用の静的クラス」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 静的メソッドとフィールド
  2. ユーティリティ用の静的クラス
  3. 定数とreadonlyフィールド
  4. 静的設計とインスタンス設計
← C# Academyに戻る