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

  1. ネプラス インフラエンジニア採用
  2. テックマガジン
  3. テクノロジー
  4. C#のdelegateでできることは?便利な使い方やラムダ式についても紹介

C#のdelegateでできることは?便利な使い方やラムダ式についても紹介

  • テクノロジー
  • プログラミング
公開日時:   更新日時:
C#のdelegateでできることは?便利な使い方やラムダ式についても紹介
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

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

    C#のdelegateとは?


    C#にはdelegateという文法があります。delegateとは日本語で「委譲」と訳され、任せるという意味になります。その通りに、C#のdelegateはメソッドを代入してその処理を「おまかせ」することができるのです。

    delegateはC言語の関数ポインタという機能によく似ているのですが、この記事を読む人はC言語を知らない人も多いでしょう。そんな方々にもわかるように説明するので、是非この記事を読んでdelegateについて知って下さい。
     

     

    C#のdelegateの基本的なサンプルプログラム


    以下がC#のdelegateのシンプルなサンプルプログラムです。

    実行結果は、以下が表示されます。

    C#のdelegateで可能なこと4選


    C#でdelegate型の変数にstaticな静的メソッドやクラスのインスタンスの動的メソッドを代入できます。またメソッドの追加や削除を動的に行うことができます。

    1:メソッドの処理ができる

    上の例について説明すると、delegateのDelegateMethodにShowNumという普通のメソッドを代入して、DelegateMethodの実体のdmを呼ぶことでShowNumが呼び出されるという流れです。

    newで宣言しているのに「代入」と言いましたが、実際にnewしている箇所を以下のように記述することも可能です

    2:インスタンスメソッドを代入できる

    C#のdelegateにはstaticな静的メソッドだけでなく、クラスのインスタンスの動的メソッドも代入できます。以下のように行います。

    HumanクラスのインスタンスhuのメソッドShowMesを、delegateのdmに代入しています。これを実行すれば以下のように表示されます。

    3:複数のメソッドを代入できる

    C#のdelegateには複数のメソッドを追加できます。上のMainメソッドを以下のように変更し、ShowSpringというメソッドを追加しましょう。

    これを実行すると以下のように表示されます。

    4:追加したメソッドを除去できる

    delegateに+=でメソッドを追加すると、連続で実行されます。ただし引数と戻り値が同じタイプのメソッドしか追加できません。この例では追加するメソッドに引数がある場合や、戻り値がvoidではないメソッドを追加しようとしてもエラーになります。

    またdelegateには+=による追加だけでなく-=による除去もできます。Mainメソッドを以下のように変えてみましょう。

    結果は以下のようになります。

    -=により2つあったメソッドが1つになったということです。

    C#のdelegateの便利な使い方4つ


    C#でdelegateを使用して条件判断処理を差し替える例を提示して、匿名関数を使用するように修正したり定義済みdelegateを利用するように修正してみます。またdelegateを使用したコールバック関数の例も提示します。

    1:条件判断処理を差し替える

    C#のdelegateは以下のようなケースで役に立ちます。

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

    処理の流れは以下の通りです。

    1.delegateのJudgeMethodにJudgeOver5を代入する。

    2.JudgeOver5の判断で配列のaryの中から5より大きい値を取り出す。

    3.JudgeMethodにJudgeUnder5を代入する。

    4.JudgeUnder5の判断でaryの中から5より小さな値を取り出す。

    このようにC#のdelegateは条件判断の処理を差し替えたい時に、便利に使えるのです。

    2:匿名関数で代入するメソッドを省略する

    上のサンプルのJudgeOver5やJudgeUnder5のような1行で済む短いメソッドはもっとコンパクトにすることができます。それが匿名関数です。上のサンプルのjmにJudgeOver5とJudgeUnder5を代入している箇所は、以下のように記述できます。

    これでJudgeOver5とJudgeUnder5は不要になります。

    3:コールバック関数を代入する

    コールバック関数とは非同期処理が終了した時に通知を行う関数のことです。
    ここではdelegateを使用して、DoCallBackをコールバック関数として使用するC#のサンプルコードを示します。

    4:定義済みdelegateを利用する

    delegate bool JudgeMethod(int num);の様にユーザが独自にdelegateを定義することも可能ですが、よく使用されるものは定義済みdelegateとして事前に用意されています。

    ここではC#のFunc型変数を利用した例を示します。

    Func型変数

    Func型とは、任意のデータ型の戻り値があり0~16個の任意のデータ型の引数を持つことができるデリゲートです。

    「条件判断処理を差し替える」のC#のサンプルコードは以下の様に修正できます。

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

    C#のdelegateとあわせて覚えておきたいラムダ式


    C#でFunc型変数を使用した場合、匿名メソッドを利用した場合とラムダ式を使用した場合の違いは以下の様になります。

    Func型変数を使用した場合の例は以下になります。
    ・参照されるメソッド。

    ・Func型変数の宣言

    匿名メソッドを利用したコードの例は以下になります。

    ラムダ式を使用した場合の例は以下になります。

    メソッドを独立して定義する必要はなく、その場でメソッドの内容を記述します。

    ラムダ式の使い方

    「Func型変数」のC#のサンプルコードは以下の様に修正できます。

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

    C#のdelegateを使ってみよう


    ここまでC#でdelegateを使用する例を提示してきました。基本的な使い方から動的にメソッドを追加して連続処理を行ったり、動的に条件判断処理を変更する例などを示してきました。

    delegateの委譲という考え方も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