カテゴリ: C# 更新日: 2026/02/04

C#の動的型付け(dynamic型)とは?柔軟な変数型を理解しよう

C#の動的型付け(dynamic型)とは?柔軟な変数型を理解しよう
C#の動的型付け(dynamic型)とは?柔軟な変数型を理解しよう

先生と生徒の会話形式で理解しよう

生徒

「C#の変数って、使う前に型を決めなきゃいけないんですよね?」

先生

「基本的にはそうですが、C#には少し特別な型があります。それがdynamic型です。」

生徒

dynamic型ってなんですか?なんだか難しそう……」

先生

「大丈夫、簡単な例で説明していきますよ!dynamic型を使うと、変数の型を事前に決めずに柔軟に使うことができるんです。」

1. C#のdynamic型とは?

1. C#のdynamic型とは?
1. C#のdynamic型とは?

C#のdynamic(ダイナミック)型は、変数の型を実行時に決めることができる特別な型です。通常、C#では変数の型(たとえばintやstringなど)をあらかじめ明示的に指定しなければなりませんが、dynamic型を使うと何でも入る「箱」のように扱えます。

動的型付けとは、プログラムを実行するタイミングで、変数の中身の型が決まることを意味します。これにより、より柔軟なコードを書くことができる一方で、注意しないと実行時エラーにつながることもあります。

2. dynamic型の基本的な使い方

2. dynamic型の基本的な使い方
2. dynamic型の基本的な使い方

まずはdynamic型の基本的な使い方を見てみましょう。


using System;

class Program
{
    static void Main()
    {
        dynamic value = 10;
        Console.WriteLine(value);

        value = "こんにちは";
        Console.WriteLine(value);

        value = true;
        Console.WriteLine(value);
    }
}

この例では、valueという1つの変数に、整数(int)、文字列(string)、論理値(bool)を順番に代入しています。型を明示しなくても、C#が実行時に自動で型を判断してくれます。

出力結果は以下の通りです。


10
こんにちは
True

3. dynamic型とvar型の違い

3. dynamic型とvar型の違い
3. dynamic型とvar型の違い

dynamic型と混同しやすいのがvar型です。どちらも一見似ていますが、決定されるタイミングが違うのがポイントです。

  • var型:コンパイル時(プログラムを書く段階)に型が決まる
  • dynamic型:実行時(プログラムを動かす段階)に型が決まる

例を見て比較してみましょう。


var text = "Hello"; // textはstring型として決まる
text = 100; // コンパイルエラー

dynamic text = "Hello"; // 実行時に型が決まる
text = 100; // 問題なし(実行時にint型として扱われる)

4. dynamic型の注意点

4. dynamic型の注意点
4. dynamic型の注意点

dynamic型はとても柔軟ですが、使いすぎると実行時エラーが起こりやすくなります。

たとえば、次のようなコードはどうなるでしょうか?


dynamic number = 10;
Console.WriteLine(number.Length); // エラー!

numberは整数(int型)なので、Lengthというプロパティは存在しません。そのため、実行時にエラーになります。コンパイル時に間違いを検出できないため、バグに気付きにくくなるのです。

5. dynamic型が活躍する場面

5. dynamic型が活躍する場面
5. dynamic型が活躍する場面

dynamic型は、型が事前にわからないような場面で便利です。たとえば以下のようなケースです。

  • 外部のデータ(JSONやXML)を処理するとき
  • リフレクション(プログラム内部の情報を動的に操作)を使うとき
  • COMオブジェクトやスクリプトとの連携

初心者のうちは多用する必要はありませんが、「そういう特殊な場面で使う型なんだな」と覚えておくと良いでしょう。

6. dynamic型を使った簡単な関数の例

6. dynamic型を使った簡単な関数の例
6. dynamic型を使った簡単な関数の例

次に、dynamic型を使って関数(メソッド)にさまざまな型の引数を渡す例を見てみましょう。


using System;

class Program
{
    static void Main()
    {
        ShowValue(123);
        ShowValue("テスト");
        ShowValue(3.14);
    }

    static void ShowValue(dynamic value)
    {
        Console.WriteLine("値は:" + value);
    }
}

この例では、整数・文字列・小数など、どんな型でもShowValueメソッドに渡すことができます。これがdynamic型の最大の強みです。


値は:123
値は:テスト
値は:3.14

7. 初心者が覚えておくべきポイント

7. 初心者が覚えておくべきポイント
7. 初心者が覚えておくべきポイント

最後に、プログラミング未経験の方がdynamic型について覚えておきたいポイントをまとめます。

  • dynamic型は、型を自由に変えられる特別な型です。
  • 実行時に型が決まるため、柔軟に使えます。
  • 使いすぎは注意。間違った使い方でもコンパイルできてしまうので、実行時にエラーになる可能性があります。
  • 特別な場面で活躍する型ですが、通常の開発ではintstringなどの静的な型を使うのが基本です。

このように、dynamic型はC#の中でも少し特別な存在です。初心者のうちは「型が決まっていない箱のようなもの」とイメージしておくと理解しやすいでしょう。

まとめ

まとめ
まとめ

C#におけるdynamic型は、プログラムの実行時に型が決定されるという柔軟性の高い特別な型です。通常のC#プログラミングではintstringなどの静的型付けが基本とされていますが、dynamic型をうまく活用すれば、型がわからない場面や柔軟に型を扱いたいケースでも対応できます。

特に、外部からの入力データ(JSONやXML)を処理する場面、リフレクションなどを用いた動的処理、さらにはShowValueのような汎用メソッドを作成する際には、このdynamic型が非常に役立ちます。

しかし、柔軟な反面、型に関するエラーが実行時まで分からないというリスクがあるため、通常のコードでは使いすぎに注意する必要があります。間違ったプロパティやメソッドを呼び出すとコンパイルは通っても実行時にエラーとなるため、しっかりとデータの構造や期待される型を把握しておくことが重要です。

dynamic型を使う際のポイントは以下の通りです:

  • 型の指定が難しい場面ではdynamic型が力を発揮する
  • 動的に型を切り替えられるので柔軟な処理が可能
  • 使いどころを見極めて安全に活用するのがコツ

では、復習をかねてdynamic型を使ったサンプルコードを見てみましょう。

dynamic型を使ったサンプルプログラム


using System;

class Program
{
    static void Main()
    {
        dynamic item = 42;
        Console.WriteLine($"最初の型:{item.GetType()} → 値:{item}");

        item = "文字列です";
        Console.WriteLine($"次の型:{item.GetType()} → 値:{item}");

        item = DateTime.Now;
        Console.WriteLine($"最後の型:{item.GetType()} → 値:{item}");
    }
}

最初の型:System.Int32 → 値:42
次の型:System.String → 値:文字列です
最後の型:System.DateTime → 値:2025/11/10 15:00:00

この例のように、1つのdynamic変数で複数の異なる型のデータを自在に扱えるのが大きな特長です。とはいえ、基本的にはvarintのような明確な型指定がベースとなるので、dynamicは必要に応じて補助的に使うというバランス感覚が大切です。

先生と生徒の振り返り会話

生徒

「dynamic型って、どんな型の値でも扱えるのが便利ですね!でも、ちょっと怖さもあります…」

先生

「その通りです。dynamic型は型が柔軟だからこそ、使う場面をしっかり考える必要があります。特に実行時のエラーには要注意ですね。」

生徒

「じゃあ、基本的にはintやstringを使って、特殊な場面だけdynamicを使うのがいいんですね。」

先生

「その考え方でOKです。dynamic型は特定の目的に合わせて使えば、とても強力な道具になりますよ。無理に使わず、必要な場面で活躍させましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#のdynamic型とは何ですか?初心者向けにわかりやすく教えてください。

C#のdynamic型とは、変数の型を実行時に決定できる特別な型です。通常のC#では型を明示的に指定する必要がありますが、dynamic型を使うと柔軟にさまざまな型の値を代入できます。
カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.4
Java&Spring記事人気No4
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方