C# 高度なプログラミング 第 12 章 動的言語拡張
(1) DLR
C#4の動的関数は、DynamicLanguage Runtime(動的言語ランタイム、)です。 DLR) の一部。 DLRは、CLRに追加されたサービスのセットです。
(2)dynamic型
dynamic型を使用すると、コンパイル時に型チェックを無視するコードを書くことができます。コンパイラーは、dynamic 型の オブジェクト に対して定義された操作はすべて有効であると想定し、実行前にエラーをチェックしません。
例:
dynamic person = "人";string firstName = person.FirstName;
これらの 2 行のコードはコンパイラによってコンパイルできますが、[実行] をクリックするとエラーが報告されます:
dynamic タイプは非常に便利ですが、それには代償が伴います。
(3)DLR ScriptRuntime が含まれています
スクリプト編集機能をアプリケーションに追加し、スクリプトに値を渡したり、スクリプトから値を渡したりして、アプリケーションがスクリプトを使用してスクリプトを完了できるようにします。仕事。
(4) DynamicObject と ExpandoObject
は DynamicObject から派生するか、ExpandoObject を使用して独自の動的オブジェクトを作成できます。
DynamicObject 派生を使用して動的オブジェクトを作成するには、TrySetMembe()、TryGetMember()、および TryInvokeMember() の 3 つのメソッドをオーバーライドする必要があります。
派生に ExpandoObject を使用する場合と DynamicObject を使用する場合の違いは、メソッドをオーバーライドする必要がないことです。
例:
class Program { static void Main(string[] args) { Func<string, string, string> getFullName = (f, l) => { return f + " " + l; }; dynamic byexobj = new ExpandoObject(); byexobj.FirstName = "李"; byexobj.LastName = "四"; byexobj.GetFullName = getFullName; Console.WriteLine(byexobj.GetType()); Console.WriteLine(byexobj.GetFullName(byexobj.FirstName, byexobj.LastName)); Console.WriteLine("====================="); dynamic dyobj = new MyDynamicObject(); dyobj.FirstName = "张"; dyobj.LastName = "三"; dyobj.GetFullName = getFullName; Console.WriteLine(dyobj.GetType()); Console.WriteLine(dyobj.GetFullName(dyobj.FirstName, dyobj.LastName)); Console.ReadKey(); } } public class MyDynamicObject : DynamicObject { Dictionary<string, object> dynamicData = new Dictionary<string, object>(); public override bool TrySetMember(SetMemberBinder binder, object value) { dynamicData[binder.Name] = value; return true; } public override bool TryGetMember(GetMemberBinder binder, out object result) { bool success = false; result = null; if (dynamicData.ContainsKey(binder.Name)) { result = dynamicData[binder.Name]; success = true; } else { result = "未找到该属性的值"; success = false; } return success; } public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { dynamic method = dynamicData[binder.Name]; result = method((string)args[0],(string)args[1]); return result != null; } }
上記のコードを実行すると、結果は次のようになります:
以上がC# 高度なプログラミング 第 12 章 動的言語拡張の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、CのNull Poernter recerferenceの課題を調査します。問題は、問題はnullではなく、その誤用であると主張しています。 記事では、参照前のチェック、ポインターInitialiなど、非参照を防止するためのベストプラクティスの詳細

この記事では、printf内の\ nエスケープシーケンスを使用してcで新しいライン文字を作成し、関数を置く方法について説明します。 機能を詳しく説明し、出力のラインブレークに使用することを示すコード例を提供します。

この記事は、Cコンパイラの選択に関する初心者を案内しています。 GCCは、使いやすさ、幅広い可用性、広範なリソースが初心者に最適であるため、最適であると主張しています。 ただし、GCC、Clang、MSVC、およびTCCも比較して、その違いを強調しています

この記事では、現代のCプログラミングにおけるNullの継続的な重要性を強調しています。 進歩にもかかわらず、Nullは明示的なポインター管理にとって重要なままであり、有効なメモリアドレスがないことをマークすることにより、セグメンテーションの障害を防ぎます。 最高のPRAC

この記事では、初心者向けのオンラインCコンパイラをレビューし、使いやすさとデバッグ機能に焦点を当てています。 OnlineGDBとRepl.itは、ユーザーフレンドリーなインターフェイスと役立つデバッグツールのために強調表示されます。 プログラムやコンパイルなどのその他のオプション

この記事では、オンラインCプログラミングプラットフォームを比較し、デバッグツール、IDE機能、標準コンプライアンス、メモリ/実行の制限などの機能の違いを強調しています。 「最良の」プラットフォームはユーザーのニーズに依存していると主張しています。

この記事では、C IDEでの効率的なコードコピーについて説明します。 コピーはコンパイラ機能ではなくIDE機能であり、IDE選択ツールの使用、コード折りたたみ、検索/交換、テンプラなど、効率を向上させるための詳細戦略であることを強調しています。

この記事では、Cプログラムのコンパイルでの出力Windowsの欠落をトラブルシューティングします。 実行可能ファイルの実行に失敗し、プログラムエラー、誤ったコンパイラ設定、バックグラウンドプロセス、迅速なプログラム終了などの原因を調べます。ソリューションにはchが含まれます
