ユーティリティ用の静的クラス
静的クラスにヘルパー関数をまとめます。
「ユーティリティ用の静的クラス」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 静的メソッドとフィールド
- ユーティリティ用の静的クラス
- 定数とreadonlyフィールド
- 静的設計とインスタンス設計