dynamic型
dynamicを使って型の解決を実行時まで遅延させます。
「dynamic型」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
dynamic とは
dynamic 型は、コンパイル時の型チェックを回避します。メンバーへのアクセスや演算は、代わりに実行時に解決されます。
using System;
class Program {
static void Main() {
dynamic value = 10;
Console.WriteLine(value + 5);
}
}異なる型の再代入
dynamic 変数には任意の型を格納でき、代入するたびに型を変更することもできます。
using System;
class Program {
static void Main() {
dynamic x = 1;
Console.WriteLine(x);
x = "now a string";
Console.WriteLine(x);
}
}実行時バインディング
dynamic では、コンパイラはコードを信頼します。メソッドやプロパティの検索はコンパイル時ではなく、その行の実行時に行われます。
using System;
class Program {
static void Main() {
dynamic text = "hello";
Console.WriteLine(text.ToUpper());
}
}エラーは実行時に発生する
チェックが遅延されるため、存在しないメンバーを使うとコンパイルに失敗するのではなく、実行時に RuntimeBinderException がスローされます。
using System;
using Microsoft.CSharp.RuntimeBinder;
class Program {
static void Main() {
dynamic n = 5;
try {
n.NoSuchMethod();
} catch (RuntimeBinderException) {
Console.WriteLine("No such member");
}
}
}dynamic と var
var はコンパイル時に型が固定されますが、dynamic は実行時に柔軟に扱われます。見た目は似ていますが、動作は大きく異なります。
using System;
class Program {
static void Main() {
var fixedType = 10;
dynamic flexible = 10;
flexible = "changed";
Console.WriteLine(fixedType + " " + flexible);
}
}dynamic に対する算術演算
dynamic に対する演算子は、関係する実際の値に基づいて実行時に解決されます。
using System;
class Program {
static void Main() {
dynamic a = 3;
dynamic b = 4;
Console.WriteLine(a * b);
}
}dynamic の戻り値
型が実際に変化する場合、メソッドは dynamic を返すことができます。ただし、呼び出し側ではコンパイル時の支援が失われます。
using System;
class Program {
static dynamic GetValue(bool flag) {
return flag ? (dynamic)42 : "text";
}
static void Main() {
Console.WriteLine(GetValue(true));
Console.WriteLine(GetValue(false));
}
}dynamic の使用例
dynamic は、COM 相互運用、JSON のようなデータ、実行時まで形状が分からないコードの呼び出しに役立ちます。
using System;
class Program {
static void Main() {
dynamic data = 100;
data += 1;
Console.WriteLine(data);
}
}パフォーマンスへのコスト
実行時バインディングにはオーバーヘッドがあります。タイトなループや単純なコードでは、速度と安全性のために静的型を優先します。
using System;
class Program {
static void Main() {
int fast = 0;
for (int i = 0; i < 5; i++) fast += i;
Console.WriteLine(fast);
}
}IntelliSense が使えない
型が実行時まで分からないため、エディターは dynamic のメンバーを候補として表示できません。これにより開発速度が低下します。
using System;
class Program {
static void Main() {
dynamic s = "Code";
Console.WriteLine(s.Length);
}
}使用は控えめに
静的型付けでは本当に表現できない状況でのみ dynamic を使い、それ以外では具象型を優先します。
using System;
class Program {
static void Main() {
dynamic flexible = 7;
Console.WriteLine(flexible.GetType().Name);
}
}理解度チェック
dynamic の理解度を確認しましょう。
まとめ
dynamic はコンパイル時の型チェックを無効にし、実行時にメンバーを解決します。そのため、dynamic 変数は型を変更でき、無効な呼び出しでは RuntimeBinderException がスローされます。
コンパイル時に型が固定される var とは異なり、dynamic は柔軟ですが、パフォーマンスが低下し、IntelliSense も使えません。使用は控えめにしてください。
よくある質問
「dynamic型」レッスンは無料ですか?
はい。「dynamic型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「dynamic型」で何を学びますか?
dynamicを使って型の解決を実行時まで遅延させます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「dynamic型」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。