.NET 4 での ExpandoObject クラスの導入により、その機能に関する疑問が生じています。 хэв-таблиц。 ExpandoObject はこれらのデータ構造と同様の機能を提供しますが、その実用性を高める独自の利点を誇っています。
ExpandoObject の重要な利点の 1 つは、複雑な階層オブジェクトの作成を容易にする機能です。オブジェクト。ネストされた辞書は扱いにくくなるため、ExpandoObject はよりエレガントで読みやすいソリューションを提供します。次の例を考えてみましょう。
Dictionary<String, object> dict = new Dictionary<string, object>(); Dictionary<String, object> address = new Dictionary<string,object>(); dict["Address"] = address; address["State"] = "WA"; Console.WriteLine(((Dictionary<string,object>)dict["Address"])["State"]);
上記のアプローチと比較して、ExpandoObject ではより簡潔で直感的な構文が可能です。
dynamic expando = new ExpandoObject(); expando.Address = new ExpandoObject(); expando.Address.State = "WA"; Console.WriteLine(expando.Address.State);
ExpandoObject は、 INotifyPropertyChanged インターフェイスを使用すると、単なる辞書と比較してプロパティをさらに制御できるようになります。このインターフェイスにより、オブジェクトはプロパティ値が変更されたときにオブザーバーに通知できるようになり、データ バインディングとプロパティ検証のシナリオが容易になります。
最後に、ExpandoObject はイベント処理をサポートし、アタッチとデタッチが可能になります。イベント ハンドラーをそのプロパティに追加します。この機能により、オブジェクト イベントの管理と応答が柔軟になります。
class Program { static void Main(string[] args) { dynamic d = new ExpandoObject(); // Initialize the event to null (meaning no handlers) d.MyEvent = null; // Add some handlers d.MyEvent += new EventHandler(OnMyEvent); d.MyEvent += new EventHandler(OnMyEvent2); // Fire the event EventHandler e = d.MyEvent; e?.Invoke(d, new EventArgs()); } static void OnMyEvent(object sender, EventArgs e) { Console.WriteLine("OnMyEvent fired by: {0}", sender); } static void OnMyEvent2(object sender, EventArgs e) { Console.WriteLine("OnMyEvent2 fired by: {0}", sender); } }
さらに、ExpandoObject を使用すると、EventHandler
以上が.NET でディクショナリやハッシュテーブルではなく ExpandoObject を選択する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。