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

dynamic型: 型指定なんか忘れてしまえ!

Written By: 川俣 晶連絡先

この章のテーマ §

 dynamic型について学びます。dynamic型は、動的プログラミングを可能とします。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, メソッドの基礎, string型

解説 §

 世の中には型指定が存在しないプログラミング言語があります。その方が効率が良い、学習しやすいと考える人たちがいるからです。そのような型のないプログラミングを動的プログラミングと言います。

 C# では、dynamic型を使用すると動的プログラミングができます。dynamic型はコンパイラが一切の型チェックをやめる機能です。dynamic型は、本当の型ではなく実体はありません。

 dynamic型を使用するにはintやvarなどを使用せず、型としてdynamicと書くだけでよく、とても簡単です。

 しかし、実際にdynamic型はあまり使われていません。dynamic型には以下の弱点もあるからです。

  • 綴りなどが間違っていてもコンパイラはエラーにしない
  • 実行時の効率が良くない
  • 入力時のインテリセンスで候補リストが出てこない

 dynamic型が使用されるのは【C#の側での型定義が存在しないオブジェクトを扱いたい】場合や、【ダックタピングをやりたい】などの限られた場面になっているようです。

 ダックタイピングとは、【見た目が同じなら同じである】という考え方で、サンプルソースの2つのSayメソッドのようなものです。これらは別々のクラスにあって相互に継承関係は存在しませんが、見た目が同じなので同じものとして扱いたいニーズが存在することがあります。こう言うときは、dynamic型でスマートに解決できます。

罠の数々 §

  • dynamic型を使ってもエラーは減らせない。単にコンパイルの時に検出できなかったエラーが実行時に例外などを起こすだけである
  • 従って使っても楽はできない。むしろ手間は増える。コンパイル時にエラーが分かった方が素早く対処できるからだ

参考リンク §

dynamic 型の使用 (C# プログラミング ガイド)

サンプルソース: kw_dynamic §

sub(new A());

sub(new B());

void sub(dynamic p)

{

    p.Say("HELLO!");

}

class A

{

    public void Say(string message) => Console.WriteLine($"{message} from A");

}

class B

{

    public void Say(string message) => Console.WriteLine($"{message} from B");

}

実行結果 §

HELLO! from A

HELLO! from B

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

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

dynamic a = new A();

a.sub("Hello!");

class A

{

    void sub()

    {

        Console.WriteLine("called");

    }

}

  1. Hello!
  2. called
  3. 何も出力しない
  4. コンパイルエラー
  5. 実行時例外

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
28日
throw文: あえて例外を自ら発生させる!
3days 0 count
total 1061 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
26日
where キーワードとジェネリック: 型から自由な型を作ろう!
3days 0 count
total 1621 count

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

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

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

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

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

https://mag.autumn.org/tb.aspx/20220127102805
サイトの表紙【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.