2021年12月24日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 800 count

typeof演算子: 型の情報を何でも取り出す魔法の演算子

Written By: 川俣 晶連絡先

この章のテーマ §

 typeof演算子について学びます。typeof演算子は型の詳細情報を知ることができる便利な演算子です。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, int型, string型, 型パラメータ

解説 §

 型の情報を持った型オブジェクトは通常、GetTypeメソッドで取得できます。この型オブジェクトには、型のフルネーム(FullName)などを始め多くの情報が詰まっています。

 しかし、GetTypeメソッドは値が存在しなければ使用できません。

 たとえば、値の1に対してGetTypeメソッドを実行することはできますが、intという型に対しては実行できません。

 そのため、型名から直接型オブジェクトを得るためにtypeof演算子が存在します。

 サンプルソースの通り、1.GetType()と書いてもtypeof(int)と書いても、同じint型の型オブジェクトが取得でき、フルネームのSystem.Int32を取得できます。

 この機能は、一見意味がないように思えます。

 取得できるものが決まっているからです。

 しかし、いくつかのケースではとても便利です。

 たとえば、型パラメータと併用するととても便利です。サンプルソースのsubメソッドのように、型パラメータに対してtypeof演算子を使うと返ってくる値は可変となり、取得する意味が出てきます。実行するまで何が返ってくるか分からないのです。

罠の数々 §

  • typeof演算子が使用できない型がいくつか存在する。dynamic型や、string?のようなNULL 許容参照型では typeof 演算子を使用できない
  • ビギナーは型オブジェクトの有り難みが分からないと思うが、中級以上になると凄く便利になる。たとえば、型のメンバーを列挙して操作を加えたりできる。それによって、短いコードで全てのメンバーを書き換えたりできる

参考リンク §

typeof 演算子

サンプルソース: kw_typeof §

Console.WriteLine($"1.GetType().FullName = {1.GetType().FullName}");

Console.WriteLine($"typeof(int).FullName = {typeof(int).FullName}");

Console.WriteLine("Tがintの場合");

sub<int>();

Console.WriteLine("Tがstringの場合");

sub<string>();

void sub<T>()

{

    Console.WriteLine($"typeof(T).FullName = {typeof(T).FullName}");

}

実行結果 §

1.GetType().FullName = System.Int32

typeof(int).FullName = System.Int32

Tがintの場合

typeof(T).FullName = System.Int32

Tがstringの場合

typeof(T).FullName = System.String

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

sub<string?>();

void sub<T>()

{

    Console.WriteLine($"typeof(T).FullName = {typeof(T).FullName}");

}

  1. null
  2. string
  3. string?
  4. コンパイルエラー
  5. 実行時に例外

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2021年
12月
25日
~/&/^/|/<</>>演算子: ビット操作は難易度は高いが効率も高い
3days 0 count
total 762 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2021年
12月
23日
キャストとas演算子: 呪文一つでタイプチェンジ!
3days 0 count
total 897 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20211224084303
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.