ネプラスのテックブログ。ネットワーク、クラウド、サーバなどのITインフラ情報を中心に発信中。

  1. ネプラス インフラエンジニア採用
  2. テックマガジン
  3. テクノロジー
  4. C#のusingを活用しよう!

C#のusingを活用しよう!

  • テクノロジー
  • プログラミング
公開日時:   更新日時:
C#のusingを活用しよう!
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    C#エンジニア 案件・求人一覧はこちら

    C#のusingとは?

    C#のプログラミングをする方は、usingを活用していますでしょうか?

    「using?あの先頭にいつもあるやつだよね」と思う人が多いでしょう。しかし以下のようなC#のソースコードの先頭にあるusing宣言は、名前空間を呼び出すためのもので、今回説明するusingとは違います。

    using System;
    using System.IO;

    今から紹介するusingは、ファイルアクセス処理などでとても便利に使える機能です。この記事を読んで、是非シンプルで安全なC#プログラミングを行ってください。なおこの記事のサンプルを実行する場合は、ソースの先頭に”using System.IO;”を追加してください。

    usingはファイルアクセス処理の後始末をしてくれる

    C#のusingとは、IDisposableインターフェイスを実装したアンマネージドクラスを正常に終了してくれる構文です。と言うと難しそうですが、簡単に言えばファイルのアクセス処理を自動的に終了してくれる便利な機能です。例としては以下のように使います。

    なおこのようにStreamReaderを文字コードに指定せず生成した場合は、UTF-8で読み込むのでご注意下さい。日本のWindows標準のShift_JISではありません。これはC#がWindows専用ではなくマルチプラットフォーム言語を目指していることによります。

    usingを使えばfinallyが不要

    上のサンプルプログラムはdownloadフォルダにあるtext.txtを読み込んで、中身をコンソールに表示します。ファイルが無かった場合は例外が発生し、catchで捉えてエラーメッセージを表示します。

    もしファイルアクセスを少し学んだ人なら「あれ?終了処理のfinallyが無くていいの?」と思うでしょう。そうですね、ファイルアクセス処理を最初は以下のように習ったかもしれません。

    usingはfinally処理を代行してくれる

    ところがusingを使えばfinally節が不要になるのです。usingが終了処理のfinallyとその中で行うDisposeを実行してくれるからです。正確に言えば、usingはファイル処理クラスに実装されているIDisposableインターフェイスのDisposeメソッドを必ず実行する、ということです。

    「ファイルアクセスの終了処理はDisposeじゃなくてCloseじゃないの?」と思う人もいるかもしれませんが、C#ではCloseの処理はDisposeと同じなので問題ありません。

    usingを使ってプログラムをシンプルに

    usingを使うことでC#のファイルアクセス処理はシンプルになります。また、このサンプルで言えばsreadの宣言をtryの中で行えるので、処理がスマートになるメリットもあります。finallyを使う場合はそういったファイル制御変数をtryの外で宣言する必要がありますよね。

    ファイル操作変数が1つだけだとあまりメリットを感じないかもしれませんが、次の例のように2つ以上あればusingの効果を実感できるでしょう。

    複数のusingでソースコードがよりすっきりする

    上のサンプルは読み込んだファイルの内容をそのまま複製します。上のようにusingは2つ並べて使用することもできます。usingを使わない場合はfinallyに複数のファイルアクセス変数のDispose処理を記述するので冗長になりますが、usingを使えばそれが不要なのですっきりします。

    便利なusingですが、注意すべき点もあります。次のサンプルプログラムを見てください。

    usingが有効な範囲は{}の中だけ

    上のサンプルを実行すると、ファイルの中身が表示されて、「もう一度表示」というメッセージが出た後に、ObjectDisposedExceptionが発生してプログラムが異常終了します。

    usingが有効な範囲は次の{}の中だけで、その外に出てしまうとDispose処理が行われた後なのでアクセスができないのです。このような間違ったプログラムを記述してもビルドの時点ではエラーにはならないので、注意しましょう。

    usingの応用

    ここまで標準のファイルアクセスクラスに対してのusingの使い方を説明してきましたが、自分が作ったクラスでもIDisposableを実装すればusingが使えます。以下のサンプルプログラムをご覧ください。

    工夫次第で便利に使えるusing

    上のサンプルプログラムを実行すると、コンソールに以下のように表示されます。

    usingでMyClassを生成しました。
    MyClass内のDisposeが呼ばれました。
    usingを抜けました。

    自作のクラスにIDisposableを実装してDisposeメソッドを記述し、usingを使用して自作のクラスを生成した場合でも、usingの後の{}を抜ける時にDisposeが呼ばれることが分かります。これを上手く利用すれば、シンプルなC#のコードを記述できるでしょう。

    おわりに

    C#のusingについて説明しましたがご理解頂けましたでしょうか。usingを利用することでファイルアクセス処理がシンプルになるだけでなく、自作のクラスにも役立てることができます。usingはC#以外の言語では見当たらない機能なので、是非活用してください。

    C#エンジニア 案件・求人一覧はこちら

    FEnetを運営しているネプラス株式会社はサービス開始から10年以上
    『エンジニアの生涯価値の向上』をミッションに掲げ、
    多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
    ネプラス株式会社ロゴ

    ネプラス株式会社はこんな会社です

    秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • インフラ業界に特化

      インフラ業界に特化

      ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。

      業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。

    • 正社員なのにフリーランスのような働き方

      正社員なのにフリーランスのような働き方

      正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。

      プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。

    • 大手直取引の高額案件

      大手直取引の高額案件

      案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。

      Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。

    • スキルアップ支援

      スキルアップ支援

      不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。

      受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など

      ※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。

    • 現給与を保証します!

      100%現給与保証

      前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。

      ※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。

    • インセンティブ制度

      インセンティブ制度

      ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。

      取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。

    • 社会保険・福利厚生

      社会保険・福利厚生

      社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。

      さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    ネプラス株式会社に興味を持った方へ

    ネプラス株式会社では、インフラエンジニアを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    オンライン面接も随時受付中。ぜひお気軽にご応募ください。

    ネプラス株式会社へのご応募はこちら↓
    ネプラス株式会社へのご応募はこちら↓

    C#新着案件New Job

    CCNA取得者歓迎!案件・求人はこちら