【C#】dynamic型の使い方

dynamic型とは

C#4.0から「dynamic」という型が導入されました。

dynamic型は、データ型の1つです。

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/types/using-type-dynamic

C#で変数を使う場合、あらかじめデータ型を指定する必要があります(静的型付け言語のため)。

しかし、このdynamicキーワードを使うことで動的型付け変数を定義することができます

使い方は、「var(型推論)」と似ています。

しかし、あくまで型推論である「var」と違い、dynamicで宣言した変数の型は「動的な型」となります。

var a = 100; // aの型はint型

dynamic b = 200; // bの型はdynamic型

通常、C#のような静的型付け言語では、オブジェクトがどのようなメンバー(フィールドやメソッド)を持っているのかをコンパイル時に知っておく必要があります。

dynamic型の場合、コンパイル時ではなくプログラムを実行する時に型のチェックが行われます(動的な型)。

 

dynamic型を使うメリット

dynamic型を使うメリットは下記の4つになります。

■遅延バインド

■タックタイピング

■ジェネリクス利用時の静的メソッド呼び出し

■多重ディスパッチ

 

サンプルコード

using System;

namespace c_dynamic
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic dy1 = 100;
            dynamic dy2 = "文字列でもOK";
            dynamic dy3 = new int[] { 1, 10, 100 };

            Console.WriteLine(dy1 + 100);
            Console.WriteLine(dy2);
            foreach (int dy4 in dy3)
            {
                Console.WriteLine(dy4);
            }

        }
    }
}

実行結果:
200
文字列でもOK
1
10
100

このようにdynamic型を使用すると、様々な型や配列などがdynamic型として扱われます。

dynamic型の変数は、どんなメンバーを持っているオブジェクトかをコンパイル時にチェックしないため、実行時エラーに注意が必要です。

また、dynamic型に入っている値の型と同じ変数に変換(代入)することができます。

using System;

namespace c_dynamic
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic dy1 = 100;
            dynamic dy2 = "文字列でもOK";
            dynamic dy3 = new int[] { 1, 10, 100 };

            int i = dy1;
            string s = dy2;
            int[] intArray = dy3;

            Console.WriteLine(i + 100);
            Console.WriteLine(s);
            foreach (int array in intArray)
            {
                Console.WriteLine(array);
            }

        }
    }
}

実行結果:
200
文字列でもOK
1
10
100

実行結果は先程と同じになります。

 

おすすめ書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)