記事内にはプロモーションが含まれています

【C#】using staticの使い方!コードを簡潔にするメリットと注意点

【C#】using staticの使い方!コードを簡潔にするメリットと注意点 C#

C#でプログラミングをしていると、Math.PowConsole.WriteLine のように、同じクラス名(型名)を何度も繰り返し書くのが面倒だと感じることはないでしょうか。

そんな時に役立つのが、C# 6.0から導入された using static ディレクティブです。

これを使うと、静的メンバー(staticメソッドやプロパティ)を、クラス名を指定せずに直接呼び出すことができるようになります。

この記事では、using static の基本的な使い方から、通常の using との違い、エイリアス(別名)との組み合わせ、そして「使いすぎると逆に読みづらくなる」という注意点まで、現在の開発現場でのベストプラクティスを交えて解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

using static とは?基本的な意味と使い方

using static は、指定した型の静的(static)メンバーを、型名を省略して利用できるようにするための機能です。

通常の using が「名前空間(namespace)」を省略するためのものであるのに対し、using static は「型名(クラスや構造体など)」を省略するために使います。

Mathクラスでの使用例

例えば、数値計算を行う System.Math クラスは、通常以下のように記述します。

using System;

class Program
{
    static void Main()
    {
        // 通常の書き方:クラス名.メソッド名
        double root = Math.Sqrt(25);
        double power = Math.Pow(2, 3);
        double pi = Math.PI;

        Console.WriteLine($"ルート: {root}, 累乗: {power}, 円周率: {pi}");
    }
}

これを using static を使って書き換えると、以下のようになります。

using System;
using static System.Math; // ここで宣言

class Program
{
    static void Main()
    {
        // クラス名(Math)を省略できる
        double root = Sqrt(25);
        double power = Pow(2, 3);
        double pi = PI;

        Console.WriteLine($"ルート: {root}, 累乗: {power}, 円周率: {pi}");
    }
}

コード冒頭で using static System.Math; を宣言することで、Math クラスに定義されている SqrtPow などの静的メソッド、および PI などの定数を、クラス名なしで直接呼び出せるようになります。

数式を多く扱うプログラムでは、コードが数式そのものに近くなり、非常に読みやすくなります。

Consoleクラスでの使用例

System.Console クラスも頻繁に使用するため、using static の恩恵を受けやすいクラスの一つです。

using static System.Console;

class Program
{
    static void Main()
    {
        WriteLine("Hello, World!");
        Write("数値を入力してください: ");
        string input = ReadLine();
        
        WriteLine($"入力された値: {input}");
    }
}

using static System.Console; を記述することで、Console.WriteLine を単に WriteLine と書くことができます。

簡単なコンソールアプリや、ログ出力を多用する場面で記述量を減らすことができます。

通常の using と using static の違い

C#初心者の方が混乱しやすいのが、通常の usingusing static の違いです。
明確な違いは「対象が何か」という点です。

ディレクティブ 対象 省略できるもの
using 名前空間 名前空間 using System;

 

System.ConsoleConsole と書ける

using static 型(クラス/構造体/Enumなど) 型名 using static System.Console;

 

Console.WriteLineWriteLine と書ける

通常の using は、クラスを使うために「名前空間」をインポートします。

一方、using static は、メソッドやプロパティを使うために「その親となる型(クラスや構造体)」をインポートするイメージです。

using static の使いどころとメリット

この機能は、どんな場面でも使えば良いというわけではありません。
効果的な使いどころがいくつか存在します。

1頻繁に使用するユーティリティ的な型

前述の System.Math のように、特定の処理で何度も呼び出す静的メンバーを持つ型に対して有効です。

数学計算(System.Math)、パス操作(System.IO.Path)、あるいはコンソール色の指定(System.ConsoleColor)などが代表的です。

なお、using static はクラスだけでなく、構造体(struct)や列挙型(Enum)などの「型」に対しても使用できます。

単体テスト(Unit Test)

単体テストのコードでは、アサーション(検証)メソッドを大量に使用します。

using static Microsoft.VisualStudio.TestTools.UnitTesting.Assert; のように宣言しておけば、Assert.AreEqual(...)AreEqual(...) と書くことができ、テストコードがスッキリします。

Enum(列挙型)の記述を短くする

using static はEnum(列挙型)にも使用できます。

// 通常
var day = System.DayOfWeek.Monday;

// using static 使用
using static System.DayOfWeek;
var day = Monday;

条件分岐などで特定のEnum値を何度も書く場合、コードのノイズを減らすことができます。

拡張メソッドをスコープに含める

少し応用的な使い方ですが、using static で指定したクラス内に定義されている「拡張メソッド」も利用可能になります。

例えば using static System.Linq.Enumerable; と宣言すると、Range(0, 10) のような静的メソッドが使えるだけでなく、Enumerable クラスで定義されているLINQの拡張メソッド群も使えるようになり、通常の using System.Linq; と同様の効果が得られます。

導入時の注意点とデメリット

便利に見える using static ですが、乱用するとコードの可読性を下げる原因になります。

どのクラスのメソッドか分からなくなる

WriteLineSqrt 程度なら有名なので推測できますが、あまり一般的でないメソッドを using static で省略すると、コードを読んでいる人が「このメソッドはどこで定義されているんだ?」と迷うことになります。

チーム開発では、誰もが知っている標準的なクラスや、文脈から明らかな場合に限定して使用するのがマナーです。

メソッド名の衝突(コンフリクト)

複数のクラスを using static した場合、同じ名前のメソッドが存在するとコンパイルエラー(または意図しない動作)になります。

using static ClassA; // Method() がある
using static ClassB; // Method() がある

class Program
{
    static void Main()
    {
        // どっちの Method() なのか判断できずエラーになる
        Method(); 
    }
}

このような場合は、using static を使わずにクラス名を明記するか、次項で解説する「エイリアス」を活用して解決します。

エイリアス(別名)との組み合わせ

メソッド名の衝突を避けつつ、記述を短くしたい場合は、using エイリアス機能を使うのが効果的です。
using static とは異なりますが、似たような目的で使用されます。

using M = System.Math;
using C = System.Console;

class Program
{
    static void Main()
    {
        C.WriteLine($"ルート2: {M.Sqrt(2)}");
    }
}

using M = System.Math; とすることで、System.Math クラスを M という短い名前(エイリアス)で扱えるようにしています。

これにより、クラス名を完全に消し去ることなく(どこのメソッドかわかる状態を保ちつつ)、タイプ量を減らすことができます。

大規模なプロジェクトでは、using static よりもこちらが好まれる場合もあります。

C#のスキルを活かして年収を上げる方法

以上、C#のusing staticの使い方について解説してきました。

なお、C#のスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

業務システム開発やアプリ開発、ゲーム開発において需要の高いC#を扱えるエンジニアは、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなC#の案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。

C#
スポンサーリンク
code-izumiをフォローする