ホームページ > バックエンド開発 > C++ > ExpandoObject と DynamicObject を使用して実行時に C# プロパティを動的に追加する方法

ExpandoObject と DynamicObject を使用して実行時に C# プロパティを動的に追加する方法

Susan Sarandon
リリース: 2024-12-30 15:31:10
オリジナル
489 人が閲覧しました

How to Dynamically Add C# Properties at Runtime Using ExpandoObject and DynamicObject?

実行時に C# プロパティを動的に追加する方法

はじめに

実行時にプロパティを動的に追加することは、さまざまなプログラミング シナリオにおける一般的な要件です。辞書やコレクションを使用するようなアプローチは、特定の状況では十分ですが、すべてのユースケースに適しているわけではありません。 ExpandoObject を活用した代替ソリューションを検討してみましょう。

ExpandoObject の使用

ExpandoObject は、実行時にメンバーを動的に追加および削除できるようにする .NET の組み込みクラスであり、メンバーの割り当てと取得を可能にします。標準のドット構文による値。このアプローチは、その場で決定されるプロパティを持つ動的オブジェクトを作成する便利な方法を提供します。

ExpandoObject を使用するには、新しいインスタンスを作成し、必要に応じてプロパティを割り当てるだけです。

dynamic dynObject = new ExpandoObject();
dynObject.SomeDynamicProperty = "Hello!";
ログイン後にコピー

動的オブジェクトの動作のカスタマイズ

動的オブジェクトの動作に特定の要件がある場合は、DynamicObject クラスを拡張してカスタムを実装できます。メンバーのアクセスと変更を処理するためのロジック。以下に例を示します。

sealed class MyDynObject : DynamicObject
{
    private readonly Dictionary<string, object> _properties;
    public MyDynObject(Dictionary<string, object> properties) { _properties = properties; }

    public override IEnumerable<string> GetDynamicMemberNames() { return _properties.Keys; }
    public override bool TryGetMember(GetMemberBinder binder, out object result) {
        return _properties.TryGetValue(binder.Name, out result); }
    public override bool TrySetMember(SetMemberBinder binder, object value) {
        _properties[binder.Name] = value; return true; }
}
ログイン後にコピー

このカスタム動的オブジェクトを使用すると、プロパティを含む動的オブジェクトを作成し、実行時にそれらを動的に変更できます。

var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 } });
Console.WriteLine(dyn.prop1);
dyn.prop1 = 150;
ログイン後にコピー

考慮事項

DynamicObject を使用すると、柔軟性と使いやすさが提供され、いくつかの可能性も生まれます。欠点:

  • 実行時検証: コンパイラーは動的呼び出しを検証できないため、実行時エラーが発生し、デバッグ機能が低下する可能性があります。
  • Intellisense サポート: 動的オブジェクトは開発環境でインテリセンスのサポートを提供しないため、ナビゲートが困難になります

したがって、開発ニーズに最適なアプローチを選択する際には、動的オブジェクト操作の利点とこれらの考慮事項のバランスをとることが重要です。

以上がExpandoObject と DynamicObject を使用して実行時に C# プロパティを動的に追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート