.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. C#のas演算子とは?キャストとの違いについて解説

C#のas演算子とは?キャストとの違いについて解説

  • C#
  • プログラミング言語
公開日時:   更新日時:
C#のas演算子とは?キャストとの違いについて解説
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    as演算子は参照型変数をダウンキャストする時に利用する演算子です。
    キャスト演算子()と似ており混同してしまう場合もあるので、キャスト演算子()との違いやアップキャストとダウンキャストの関係性について、詳しく解説していきます。

    プログラマー
    クラス変数を、そのクラスが継承しているクラス型に変換したらコンパイルエラーになりました。
    プロジェクト
    リーダー
    そんなときはas演算子を使えば解決しますよ。キャスト演算子()と似ているため、違いも一緒に学んでいきましょう!

    C#のas演算子とは?

    as演算子は、参照型変数をダウンキャストするときに用いる演算子のことです。
    それぞれについて詳しく解説していきましょう。

    参照型変数とは?

    参照型変数はクラス変数とも呼ばれ、インスタンスの参照先を格納している変数です。

    通常よく使われるintやcharなどの変数は値型変数とも呼ばれ、変数自身が値そのものを格納しています。
    そのため、値型変数に変更が加えられた場合はその値型変数の値が変更されます。

    一方、参照型変数は自分自身に値を格納しているわけではなく、インスタンスの参照先を格納しているため、参照型変数に変更を加えられた場合は参照先のインスタンスが変更されます。

    下記コードのように参照型変数Aの値が変更されたとき、同じインスタンスを参照している参照型変数Bの値も変わっていることが確認できるでしょう。

    ダウンキャストとは?

    ダウンキャストは親クラス型の参照型変数から子クラス型へキャストすることを指しますが、アップキャストされていることが前提です。

    アップキャストとはダウンキャストの対のこと。
    子クラス型の参照型変数を、子クラスが継承している親クラスの型に変更することを言います。

    以下のコードを見てください。

    アップキャストを行う場合は演算子を使わなくても正常に動作するため、一見するとただ数を更新しているように見えますが、裏で親クラス型から子クラス型へアップキャストが行われています。

    ダウンキャストはその逆で、アップキャストされた参照型変数を子クラス型に戻すことを言います。
    しかし、アップキャストのように暗黙的に行うことはできません。

    アップキャストされたインスタンスは子クラス型から生成されたもので、あくまでも親クラス型です。
    親クラス自体が子クラスを格納しているわけでは無いので、型が合わずコンパイルエラーとなるでしょう。

    正しくダウンキャストをするには、変換先の型を明示的に指定しなければなりません。
    このダウンキャスト時に使われるのが、as演算子です。

    as演算子の使用方法

    as演算子は以下のように使用します。

    先ほどコンパイルエラーになってしまったダウンキャストのコードを、as演算子を使用して変換してみましょう。

    コンパイルエラーにならずダウンキャストに成功していることが確認できます。

    as演算子とキャスト演算子()の違い

    as演算子と同じく型変換をするときに用いられるキャスト演算子()との違いは、「型変換できない時に返される内容」です。

    キャスト演算子()を使用し、型変換ができなかった場合は例外が返ります。
    一方、as演算子はというと、型変換ができなかった場合はnullが返ります。

    キャスト演算子()もダウンキャストを行うことは可能ですが、失敗時には例外が返ってきてしまうので、例外対応を事前に用意できるas演算子の使用を推奨します。

    しかしnullが返るということは、intやdoubleなどのnull値が入らない型には使用できません。
    キャスト演算子()はintからdoubleなどの型変換で使用し、as演算子は参照型変数の型変換に使用するという使い分けが必要でしょう。

    プログラマー
    as演算子はクラス変数のダウンキャスト時に最適な演算子であることが理解できました。
    プロジェクト
    リーダー
    参照型変数の型変換ができれば、クラス間の処理の幅が広がります。上手く使いこなしましょう!

    アップキャストは暗黙的に、ダウンキャストはas演算子で明示的に

    ダウンキャスト時にキャスト演算子()を使用したり、暗黙的に実行しようとしたりすると、思わぬ例外処理が投げられてしまう場合がありますので注意が必要です。
    as演算子はアップキャストやキャスト演算子()とも非常に密な関係性にあるので、違いをしっかりと理解しましょう。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

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

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

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

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

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

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

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    C#新着案件New Job